From bc2572b3d51cda02f2de18c099974fd3b6ba07a6 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 8 Jan 2023 19:07:47 +0100 Subject: [PATCH 001/129] set makefile to build from master - update patches for gluon master - update README --- Makefile | 2 +- README.md | 5 +- i18n/fr.po | 68 ++++++++++ ...re-the-correct-version-for-fritz7360.patch | 107 ---------------- patches/targets-fix-bridge.patch | 38 ------ patches/targets-ipq40xx-fritz-box-7520.patch | 12 -- patches/targets-lantiq-xrx200-devices.patch | 116 +++++++++++++----- 7 files changed, 159 insertions(+), 189 deletions(-) create mode 100644 i18n/fr.po delete mode 100644 patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch delete mode 100644 patches/targets-fix-bridge.patch delete mode 100644 patches/targets-ipq40xx-fritz-box-7520.patch diff --git a/Makefile b/Makefile index 4612275..67a4d6e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := v2022.1.x +GLUON_GIT_REF := master #v2022.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/README.md b/README.md index 37d3b7a..5decb83 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ This repository contains the site configuration for the Freifunk Aachen Gluon firmware. -This branch is compatible to Gluon v2022.1.x which is based on OpenWRT 22.03 +This is the `next` branch which is compatible to Gluon master. + +Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x. +It provides an option to test devices which are available in Gluon's master branch but are not released yet. This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation. Registration of the wireguard keys is done using a custom `wg-registration` package which sends the key through POST to our broker. diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 0000000..7d91e99 --- /dev/null +++ b/i18n/fr.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2015-08-06 20:28+0100\n" +"Last-Translator: Tobias Bernot \n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "gluon-config-mode:welcome" +msgstr "" +"Bienvenue dans l'assistant de configuration pour votre nouveau nœud " +"Freifunk. Remplissez le formulaire suivant en fonction de vos besoins " +"et enregistrez le." + +msgid "gluon-config-mode:domain" +msgstr "Domaine" + +msgid "gluon-config-mode:domain-select" +msgstr "Ici, vous avez la possibilité de sélectionner le domaine dans lequel " +"se trouve votre nœud. N'oubliez pas que votre nœud ne peut se connecter " +"qu'aux nœuds du domaine sélectionné." + +msgid "gluon-config-mode:pubkey" +msgstr "" +" " + +msgid "gluon-config-mode:novpn" +msgstr "" +"

Vous avez choisi de ne pas utiliser " +"le réseau VPN. Votre nœud ne pourra se connecter au réseau Freifunk que si " +"d'autres nœuds à portée ont déjà une connexion.

" + +msgid "gluon-config-mode:reboot" +msgstr "" +"

Votre nœud <%= pcdata(hostname) %> es en train de redémarrer et " +"va ensuite éssayer de se connecter avec les autres nœuds du réseau Freifunk " +"Vous pourrez trouver plus d'informations sur votre groupe Freifunk sur la page " +" de ton " +"groupe .

" +"

Pour retrouver cette page de configuration veuillier appuyez pendant le " +"fonctionement normal pendant 3 Secondes sur le bouton reset. L'appareil va " +"ensuite redémarer en mode configuration.

" +"

Profitez votre de nœud et amusez vous à découvrir le réseau Freifunk!

" + +# Leave empty to use the default text, which can be found in: +# package/gluon-config-mode-hostname/i18n/ +msgid "gluon-config-mode:hostname-help" +msgstr "" + +# Leave empty to use the default text, which can be found in: +# package/gluon-config-mode-geo-location/i18n/ +msgid "gluon-config-mode:geo-location-help" +msgstr "" + +msgid "gluon-config-mode:altitude-label" +msgstr "" + +# Leave empty to use the default text, which can be found in: +# package/gluon-config-mode-contact-info/i18n/ +msgid "gluon-config-mode:contact-help" +msgstr "" + +msgid "gluon-config-mode:contact-note" +msgstr "" diff --git a/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch b/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch deleted file mode 100644 index e6fba02..0000000 --- a/patches/0001-xrx200-ensure-the-correct-version-for-fritz7360.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 449bbb4e66bdf09706aac68a103200848249787a Mon Sep 17 00:00:00 2001 -From: Grische -Date: Sun, 18 Sep 2022 14:05:21 +0200 -Subject: [PATCH] xrx200: ensure the correct version for fritz7360 - ---- - ...re-the-correct-version-for-fritz7360.patch | 88 +++++++++++++++++++ - 1 file changed, 88 insertions(+) - create mode 100644 patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch - -diff --git a/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch b/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch -new file mode 100644 -index 00000000..260ffaac ---- /dev/null -+++ b/patches/openwrt/0007-xrx200-ensure-the-correct-version-for-fritz7360.patch -@@ -0,0 +1,88 @@ -+From c9ea8ac5566d8d11c16f36577323c830d18e4300 Mon Sep 17 00:00:00 2001 -+From: Grische -+Date: Sun, 18 Sep 2022 14:03:16 +0200 -+Subject: [PATCH] xrx200: ensure the correct version for fritz7360 -+ -+https://github.com/freifunk-gluon/gluon/pull/2648 -+--- -+ .../base-files/lib/preinit/01_sysinfo.sh | 68 +++++++++++++++++++ -+ 1 file changed, 68 insertions(+) -+ create mode 100644 target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh -+ -+diff --git a/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh -+new file mode 100644 -+index 0000000000..d91b3dd614 -+--- /dev/null -++++ b/target/linux/lantiq/xrx200/base-files/lib/preinit/01_sysinfo.sh -+@@ -0,0 +1,68 @@ -++set_sysinfo_xrx200_for_fritz7360_model() { -++ local board_name=$1 -++ local model -++ local urlader_version urlader_memsize urlader_flashsize -++ local hexdump_format='4/1 "%02x""\n"' -++ -++ # Values are based on urlader-parser-py -++ # https://github.com/grische/urlader-parser-py/blob/42970bf8dec7962317df4ff734c57ebf36df8905/parser.py#L77-L84 -++ urlader_version="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x0)) count=4 | hexdump -e "${hexdump_format}")" -++ if [ "${urlader_version}" != "00000003" ]; then -++ logger -s -p warn -t sysinfo-xrx200 "unexpected urlader version found: ${urlader_version}" -++ return -++ fi -++ -++ urlader_memsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x4)) count=4 | hexdump -e "${hexdump_format}")" -++ if [ "${urlader_memsize}" != "08000000" ]; then -++ logger -s -p warn -t sysinfo-xrx200 "unexpected memsize found: ${urlader_memsize}" -++ return -++ fi -++ -++ urlader_flashsize="$(dd if=/dev/mtd0ro bs=1 skip=$((0x580+0x8)) count=4 | hexdump -e "${hexdump_format}")" -++ case "${urlader_flashsize}" in -++ "02000000") # 32MB -++ # see vr9_avm_fritz7360-v2.dts -++ board_name="avm,fritz7360-v2" -++ model="AVM FRITZ!Box 7360 V2" -++ ;; -++ "01000000") # 16MB -++ # see vr9_avm_fritz7360sl.dts -++ board_name="avm,fritz7360sl" -++ model="AVM FRITZ!Box 7360 SL" -++ ;; -++ *) -++ logger -s -p warn -t sysinfo-xrx200 "unexpected flashsize found: ${urlader_flashsize}" -++ return -++ ;; -++ esac -++ -++ logger -s -p notice -t sysinfo-xrx200 "detected ${board_name} from urlader partition /dev/mtd0ro. Enforcing model ${model}." -++ echo "${board_name}" > /tmp/sysinfo/board_name -++ echo "${model}" > /tmp/sysinfo/model -++} -++ -++do_sysinfo_xrx200() { -++ local reported_board board_name model -++ -++ [ -d /proc/device-tree ] || return -++ reported_board="$(strings /proc/device-tree/compatible | head -1)" -++ -++ mkdir -p /tmp/sysinfo -++ # 7360 is notoriously known for not writing "v2" on their labels and many -++ # routers have flashed the wrong firmware with the wrong flash layout. -++ # We ensure that the underlying hardware is reported correctly, so that -++ # future upgrades will use the correct flash layout. -++ # Using 7360v2 hardware, an upgrade from a 7360v1/sl firmware to a 7360v2 -++ # is working. -++ case "${reported_board}" in -++ *7360*) -++ set_sysinfo_xrx200_for_fritz7360_model "${reported_board}" -++ ;; -++ *) -++ # fall back to OpenWRT's sysinfo detection -++ return -++ ;; -++ esac -++} -++ -++boot_hook_add preinit_main do_sysinfo_xrx200 -+-- -+2.25.1 -+ --- -2.25.1 - diff --git a/patches/targets-fix-bridge.patch b/patches/targets-fix-bridge.patch deleted file mode 100644 index 8d40f96..0000000 --- a/patches/targets-fix-bridge.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index cf21e907..d9b05b0a 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -67,6 +67,14 @@ elseif platform.match('ramips', 'mt7621', { - 'netgear,wac104', - }) then - lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' -+elseif platform.match('ipq40xx', 'generic', { -+ 'avm,fritz-box-7530', -+}) then -+ lan_ifname, wan_ifname = 'eth0.2 eth0.3 eth0.4', 'eth0.1' -+elseif platform.match('lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+}) then -+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' - end - - if wan_ifname and lan_ifname then -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig b/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig -index 719d90c0..19824c7f 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/115-swconfig -@@ -7,12 +7,13 @@ local switch_vlans = { - -- device identifier, lan ports, wan ports - ["ubnt,unifiac-mesh-pro"] = {"3 0t", "2 0t"}, - ["ubnt,unifiac-pro"] = {"2 0t", "3 0t"}, -+ ["avm,fritz-box-7530"] = {"2 3 4", "1"}, - } - - local board_name = platform.get_board_name() - local assignments = switch_vlans[board_name] - --if not platform.match('ath79', 'generic') or not assignments then -+if not assignments then - return - end - diff --git a/patches/targets-ipq40xx-fritz-box-7520.patch b/patches/targets-ipq40xx-fritz-box-7520.patch deleted file mode 100644 index 4bd89d8..0000000 --- a/patches/targets-ipq40xx-fritz-box-7520.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index e3fc746b..d5194a37 100644 ---- a/targets/ipq40xx-generic -+++ b/targets/ipq40xx-generic -@@ -50,6 +50,7 @@ device('avm-fritz-box-4040', 'avm_fritzbox-4040', { - - device('avm-fritz-box-7530', 'avm_fritzbox-7530', { - factory = false, -+ aliases = {'avm-fritz-box-7520'}, - }) - - device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index d16810e..99fb40d 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -1,44 +1,100 @@ +From 697cc96f7ce11f292cae7e437e646c12842a4723 Mon Sep 17 00:00:00 2001 +From: Florian Maurer +Date: Sun, 11 Dec 2022 20:01:32 +0100 +Subject: [PATCH 1/2] lantiq-xrx200: add Arcadyan VGV7510KW22 (o2 Box 6431) + +--- + docs/user/supported_devices.rst | 4 ++++ + package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac | 3 +++ + package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 4 ++++ + targets/lantiq-xrx200 | 5 +++++ + 4 files changed, 16 insertions(+) + +diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst +index d4727adaf1..54b8e26e6d 100644 +--- a/docs/user/supported_devices.rst ++++ b/docs/user/supported_devices.rst +@@ -238,6 +238,10 @@ ipq806x-generic + lantiq-xrx200 + ------------- + ++* Arcadyan ++ ++ - VGV7510KW22 (o2 Box 6431) ++ + * AVM + + - FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index 597201f3..72d73190 100755 +index 597201f3..7244caef 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -@@ -90,6 +90,10 @@ local primary_addrs = { - {'lantiq', 'xway', { - 'netgear,dgn3500b', - }}, -+ {'lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+ 'avm,fritz7430', -+ }}, - {'ramips', 'mt7620', { - 'netgear,ex3700', - 'tplink,archer-c2-v1', +@@ -87,6 +87,10 @@ local primary_addrs = { + {'ipq806x', 'generic', { + 'netgear,r7800', + }}, ++ {'lantiq', 'xrx200', { ++ 'arcadyan,vgv7510kw22-nor', ++ 'avm,fritz7430', ++ }}, + {'lantiq', 'xway', { + 'netgear,dgn3500b', + }}, +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +index 997c115974..fe34b849d0 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', { + 'netgear,wac104', + }) then + lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' ++elseif platform.match('lantiq', 'xrx200', { ++ 'arcadyan,vgv7510kw22-nor', ++}) then ++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' + elseif platform.match('realtek', 'rtl838x', { + 'd-link,dgs-1210-10p', + }) then diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index 364c0c31..7590efd5 100644 +index 047db6da..978fb2af 100644 --- a/targets/lantiq-xrx200 +++ b/targets/lantiq-xrx200 -@@ -47,6 +47,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { - factory = false, +@@ -47,6 +47,15 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { + factory = false, }) +device('avm-fritz-box-7430', 'avm_fritz7430', { -+ factory = false, ++ factory = false, +}) -+ - -- TP-Link - - -- CAVEAT: These devices don't have a dedicated WAN port. -@@ -63,3 +67,11 @@ device('tp-link-td-w8980', 'tplink_tdw8980', { - aliases = {'tp-link-td-w9980'}, - broken = true, -- 5GHz unsupported - }) -+ -+ -+-- O2 + +device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { -+ factory = false, -+ aliases = {'o2-box-6431'}, ++ factory = false, ++ aliases = {'o2-box-6431'}, +}) ++ + -- TP-Link + + -- CAVEAT: These devices don't have a dedicated WAN port. + +From 264ec4bdf6c0cbbc68ada925eefcccf157befe57 Mon Sep 17 00:00:00 2001 +From: Florian Maurer +Date: Sun, 11 Dec 2022 21:49:17 +0100 +Subject: [PATCH 2/2] update lan, wan separation for o2 6431 + +--- + package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -\ No newline at end of file +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +index fe34b849d0..063ab1a1d5 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +@@ -70,7 +70,7 @@ elseif platform.match('ramips', 'mt7621', { + elseif platform.match('lantiq', 'xrx200', { + 'arcadyan,vgv7510kw22-nor', + }) then +- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' ++ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' + elseif platform.match('realtek', 'rtl838x', { + 'd-link,dgs-1210-10p', + }) then From b3c2831566d42e3f420540d324316364485a6834 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 14 Jan 2023 14:34:30 +0000 Subject: [PATCH 002/129] add final o2box support, clean next --- Makefile | 2 +- modules | 6 +-- ...h => targets-lantiq-xrx200-devices1.patch} | 0 patches/targets-lantiq-xrx200-devices2.patch | 44 +++++++++++++++++++ 4 files changed, 46 insertions(+), 6 deletions(-) rename patches/{targets-lantiq-xrx200-devices.patch => targets-lantiq-xrx200-devices1.patch} (100%) create mode 100644 patches/targets-lantiq-xrx200-devices2.patch diff --git a/Makefile b/Makefile index 67a4d6e..4b875a3 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ else GLUON_AUTOUPDATER_ENABLED := 1 EXP_FALLBACK = $(shell date '+%Y%m%d') BUILD_NUMBER ?= $(EXP_FALLBACK) - GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER) + GLUON_RELEASE := $(shell git describe --tags)-next$(BUILD_NUMBER) endif JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l) diff --git a/modules b/modules index a96ea9c..df2f360 100644 --- a/modules +++ b/modules @@ -1,8 +1,4 @@ -GLUON_SITE_FEEDS="ssidchanger ffac eulenfunk ffho" - -PACKAGES_SSIDCHANGER_REPO=https://github.com/ffac/gluon-ssid-changer.git -PACKAGES_SSIDCHANGER_COMMIT=f962ab17723be144849ff988909e3a794d612d56 -PACKAGES_SSIDCHANGER_BRANCH=2019.1.x +GLUON_SITE_FEEDS="ffac eulenfunk ffho" PACKAGES_FFAC_REPO=https://github.com/maurerle/gluon-mesh-vpn-wireguard.git PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860 diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices1.patch similarity index 100% rename from patches/targets-lantiq-xrx200-devices.patch rename to patches/targets-lantiq-xrx200-devices1.patch diff --git a/patches/targets-lantiq-xrx200-devices2.patch b/patches/targets-lantiq-xrx200-devices2.patch new file mode 100644 index 0000000..609378e --- /dev/null +++ b/patches/targets-lantiq-xrx200-devices2.patch @@ -0,0 +1,44 @@ +diff --git a/patches/openwrt/0040-o2box.patch b/patches/openwrt/0040-o2box.patch +new file mode 100644 +index 00000000..d80bef7e +--- /dev/null ++++ b/patches/openwrt/0040-o2box.patch +@@ -0,0 +1,38 @@ ++From 2e3d1edf59109d6329a00d90b1e953261d602af5 Mon Sep 17 00:00:00 2001 ++From: Florian Maurer ++Date: Tue, 10 Jan 2023 13:39:50 +0100 ++Subject: [PATCH] lantiq: xrx200: Fix wifi LED on o2 box 6431 ++ ++Wifi LED did not work using phy0radio, which somehow slipped through in ++the previous testing ++ ++Signed-off-by: Florian Maurer ++--- ++ .../arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi | 1 + ++ target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds | 1 - ++ 2 files changed, 1 insertion(+), 1 deletion(-) ++ ++diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi ++index 1158aa371e..1a7a11db42 100644 ++--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi +++++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi ++@@ -80,6 +80,7 @@ ++ wifi: wifi { ++ label = "green:wlan"; ++ gpios = <&gpio 20 GPIO_ACTIVE_LOW>; +++ linux,default-trigger = "phy0tpt"; ++ }; ++ ++ power_red: power2 { ++diff --git a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds ++index 8f59538b83..0c80aaa3b8 100644 ++--- a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds +++++ b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds ++@@ -30,7 +30,6 @@ arcadyan,arv7519rw22) ++ arcadyan,vgv7510kw22-nor|\ ++ arcadyan,vgv7510kw22-brn) ++ ucidef_set_led_netdev "internet" "internet" "$led_internet" "wan" ++- ucidef_set_led_wlan "wifi" "wifi" "green:wlan" "phy0radio" ++ ;; ++ zyxel,p-2812hnu-f1|\ ++ zyxel,p-2812hnu-f3) From e10fc884313e2cacd0d96eb63bc25cce0237f009 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 4 Feb 2023 09:10:02 +0000 Subject: [PATCH 003/129] improve build logs --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4b875a3..3c18dc7 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,7 @@ GLUON_TARGETS ?= \ ramips-mt7620 \ ramips-mt7621 \ ramips-mt76x8 \ + realtek-rtl838x \ rockchip-armv8 \ sunxi-cortexa7 \ x86-64 \ @@ -44,7 +45,7 @@ endif JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l) -GLUON_MAKE := ${MAKE} -j ${JOBS} -C ${GLUON_BUILD_DIR} \ +GLUON_MAKE := ${MAKE} --no-print-directory -C ${GLUON_BUILD_DIR} \ GLUON_RELEASE=${GLUON_RELEASE} \ GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \ GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED} @@ -62,7 +63,7 @@ info: build: gluon-prepare for target in ${GLUON_TARGETS}; do \ echo ""Building target $$target""; \ - ${GLUON_MAKE} download all GLUON_TARGET="$$target"; \ + ${GLUON_MAKE} -j ${JOBS} download all GLUON_TARGET="$$target"; \ done manifest: build From 6e427f28d2c5fbfea4b46266c18d78c5a513ff89 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 4 Feb 2023 09:22:39 +0000 Subject: [PATCH 004/129] update master --- patches/targets-lantiq-xrx200-devices1.patch | 100 ------------------- patches/targets-lantiq-xrx200-devices2.patch | 44 -------- patches/targets-lantiq-xway-fb-7330.patch | 16 --- 3 files changed, 160 deletions(-) delete mode 100644 patches/targets-lantiq-xrx200-devices1.patch delete mode 100644 patches/targets-lantiq-xrx200-devices2.patch delete mode 100644 patches/targets-lantiq-xway-fb-7330.patch diff --git a/patches/targets-lantiq-xrx200-devices1.patch b/patches/targets-lantiq-xrx200-devices1.patch deleted file mode 100644 index 99fb40d..0000000 --- a/patches/targets-lantiq-xrx200-devices1.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 697cc96f7ce11f292cae7e437e646c12842a4723 Mon Sep 17 00:00:00 2001 -From: Florian Maurer -Date: Sun, 11 Dec 2022 20:01:32 +0100 -Subject: [PATCH 1/2] lantiq-xrx200: add Arcadyan VGV7510KW22 (o2 Box 6431) - ---- - docs/user/supported_devices.rst | 4 ++++ - package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac | 3 +++ - package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 4 ++++ - targets/lantiq-xrx200 | 5 +++++ - 4 files changed, 16 insertions(+) - -diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst -index d4727adaf1..54b8e26e6d 100644 ---- a/docs/user/supported_devices.rst -+++ b/docs/user/supported_devices.rst -@@ -238,6 +238,10 @@ ipq806x-generic - lantiq-xrx200 - ------------- - -+* Arcadyan -+ -+ - VGV7510KW22 (o2 Box 6431) -+ - * AVM - - - FRITZ!Box 7360 (v1, v2) [#avmflash]_ [#lan_as_wan]_ -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index 597201f3..7244caef 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -@@ -87,6 +87,10 @@ local primary_addrs = { - {'ipq806x', 'generic', { - 'netgear,r7800', - }}, -+ {'lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+ 'avm,fritz7430', -+ }}, - {'lantiq', 'xway', { - 'netgear,dgn3500b', - }}, -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 997c115974..fe34b849d0 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', { - 'netgear,wac104', - }) then - lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' -+elseif platform.match('lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+}) then -+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' - elseif platform.match('realtek', 'rtl838x', { - 'd-link,dgs-1210-10p', - }) then -diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index 047db6da..978fb2af 100644 ---- a/targets/lantiq-xrx200 -+++ b/targets/lantiq-xrx200 -@@ -47,6 +47,15 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { - factory = false, - }) - -+device('avm-fritz-box-7430', 'avm_fritz7430', { -+ factory = false, -+}) -+ -+device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { -+ factory = false, -+ aliases = {'o2-box-6431'}, -+}) -+ - -- TP-Link - - -- CAVEAT: These devices don't have a dedicated WAN port. - -From 264ec4bdf6c0cbbc68ada925eefcccf157befe57 Mon Sep 17 00:00:00 2001 -From: Florian Maurer -Date: Sun, 11 Dec 2022 21:49:17 +0100 -Subject: [PATCH 2/2] update lan, wan separation for o2 6431 - ---- - package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index fe34b849d0..063ab1a1d5 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -70,7 +70,7 @@ elseif platform.match('ramips', 'mt7621', { - elseif platform.match('lantiq', 'xrx200', { - 'arcadyan,vgv7510kw22-nor', - }) then -- lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' -+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' - elseif platform.match('realtek', 'rtl838x', { - 'd-link,dgs-1210-10p', - }) then diff --git a/patches/targets-lantiq-xrx200-devices2.patch b/patches/targets-lantiq-xrx200-devices2.patch deleted file mode 100644 index 609378e..0000000 --- a/patches/targets-lantiq-xrx200-devices2.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/patches/openwrt/0040-o2box.patch b/patches/openwrt/0040-o2box.patch -new file mode 100644 -index 00000000..d80bef7e ---- /dev/null -+++ b/patches/openwrt/0040-o2box.patch -@@ -0,0 +1,38 @@ -+From 2e3d1edf59109d6329a00d90b1e953261d602af5 Mon Sep 17 00:00:00 2001 -+From: Florian Maurer -+Date: Tue, 10 Jan 2023 13:39:50 +0100 -+Subject: [PATCH] lantiq: xrx200: Fix wifi LED on o2 box 6431 -+ -+Wifi LED did not work using phy0radio, which somehow slipped through in -+the previous testing -+ -+Signed-off-by: Florian Maurer -+--- -+ .../arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi | 1 + -+ target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds | 1 - -+ 2 files changed, 1 insertion(+), 1 deletion(-) -+ -+diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi -+index 1158aa371e..1a7a11db42 100644 -+--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi -++++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_arcadyan_vgv7510kw22.dtsi -+@@ -80,6 +80,7 @@ -+ wifi: wifi { -+ label = "green:wlan"; -+ gpios = <&gpio 20 GPIO_ACTIVE_LOW>; -++ linux,default-trigger = "phy0tpt"; -+ }; -+ -+ power_red: power2 { -+diff --git a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds -+index 8f59538b83..0c80aaa3b8 100644 -+--- a/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds -++++ b/target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds -+@@ -30,7 +30,6 @@ arcadyan,arv7519rw22) -+ arcadyan,vgv7510kw22-nor|\ -+ arcadyan,vgv7510kw22-brn) -+ ucidef_set_led_netdev "internet" "internet" "$led_internet" "wan" -+- ucidef_set_led_wlan "wifi" "wifi" "green:wlan" "phy0radio" -+ ;; -+ zyxel,p-2812hnu-f1|\ -+ zyxel,p-2812hnu-f3) diff --git a/patches/targets-lantiq-xway-fb-7330.patch b/patches/targets-lantiq-xway-fb-7330.patch deleted file mode 100644 index 3bd4d5e..0000000 --- a/patches/targets-lantiq-xway-fb-7330.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/targets/lantiq-xway b/targets/lantiq-xway -index bfbc195a..e4b6874a 100644 ---- a/targets/lantiq-xway -+++ b/targets/lantiq-xway -@@ -2,6 +2,11 @@ device('avm-fritz-box-7312', 'avm_fritz7312', { - factory = false, - }) - -+device('avm-fritz-box-7320', 'avm_fritz7320', { -+ factory = false, -+ aliases = {'avm-fritz-box-7330', 'avm-fritz-box-7330-sl'}, -+}) -+ - device('netgear-dgn3500b', 'netgear_dgn3500b', { - factory_ext = '.img', - }) From aedc1ac81b3a1da6a6db572a50c84b6df56acdb3 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 5 Feb 2023 17:28:13 +0000 Subject: [PATCH 005/129] add cudy devices --- patches/targets-ramips-mt7621.patch | 39 +++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 70d1e4f..0317ff8 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,15 +1,38 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 6744e5c6..99a125ad 100644 +index 4e6e1cff..3bef6c52 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -4,6 +4,10 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { - factory = false, - }) +@@ -7,6 +7,33 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { + + -- Cudy -+device('asus-rt-ax53u', 'asus_rt-ax53u', { ++device('cudy-x6', 'cudy_x6', { + factory = false, +}) + - - -- Cudy - ++device('cudy-wr1300', 'cudy_wr1300', { ++ factory = false, ++}) ++ ++--device('cudy-m1800', 'cudy_m1800', { ++-- factory = false, ++--}) ++-- ++--device('cudy-wr1300-v1', 'cudy_wr1300-v1', { ++-- factory = false, ++--}) ++-- ++--device('cudy-wr1300-v2', 'cudy_wr1300-v2', { ++-- factory = false, ++-- manifest_aliases = { ++-- 'cudy-wr1300-v3', ++-- }, ++--}) ++ ++device('cudy-wr2100', 'cudy_wr2100', { ++ factory = false, ++}) ++ + device('cudy-wr2100', 'cudy_wr2100', { + factory = false, + }) From 819bd3e0525da9a0cf0d152201357038a4c93718 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 5 Mar 2023 16:05:03 +0000 Subject: [PATCH 006/129] add devices --- Makefile | 5 ----- patches/targets-ath79-generic.patch | 13 ++++++++++--- patches/targets-ramips-mt76x8.patch | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 patches/targets-ramips-mt76x8.patch diff --git a/Makefile b/Makefile index 3c18dc7..26e5410 100644 --- a/Makefile +++ b/Makefile @@ -8,10 +8,6 @@ SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key GLUON_TARGETS ?= \ ath79-generic \ ath79-nand \ - bcm27xx-bcm2708 \ - bcm27xx-bcm2709 \ - bcm27xx-bcm2710 \ - bcm27xx-bcm2711 \ ipq40xx-generic \ ipq806x-generic \ lantiq-xrx200 \ @@ -23,7 +19,6 @@ GLUON_TARGETS ?= \ ramips-mt7620 \ ramips-mt7621 \ ramips-mt76x8 \ - realtek-rtl838x \ rockchip-armv8 \ sunxi-cortexa7 \ x86-64 \ diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 4f042c8..ac2b6fa 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 74eda3e8..7e9a1585 100644 +index 1a8ddcc7..c832f0c6 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -155,6 +155,14 @@ device('netgear-wndr3700-v2', 'netgear_wndr3700-v2', { +@@ -226,6 +226,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { factory_ext = '.img', }) @@ -17,7 +17,7 @@ index 74eda3e8..7e9a1585 100644 -- OCEDO -@@ -443,6 +451,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', { +@@ -542,6 +550,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', { }, }) @@ -41,3 +41,10 @@ index 74eda3e8..7e9a1585 100644 device('tp-link-wbs210-v2', 'tplink_wbs210-v2') device('tp-link-wbs510-v1', 'tplink_wbs510-v1', { +@@ -610,3 +635,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { + }) + + device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') ++ ++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite') ++ diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch new file mode 100644 index 0000000..5e86c40 --- /dev/null +++ b/patches/targets-ramips-mt76x8.patch @@ -0,0 +1,19 @@ +diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 +index b11b7672..95a4c343 100644 +--- a/targets/ramips-mt76x8 ++++ b/targets/ramips-mt76x8 +@@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', { + }, + }) + ++device('tp-link-tl-mr6400-v5', 'tplink_tl-mr6400-v5', { ++ factory = false, ++ extra_images = { ++ {'-squashfs-tftp-recovery', '-bootloader', '.bin'}, ++ }, ++}) ++ ++ + device('tp-link-tl-wa801nd-v5', 'tplink_tl-wa801nd-v5', { + factory = false, + extra_images = { From 0aed0f627184a47dbb5a0f1123c725342966f94d Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 6 Mar 2023 01:27:35 +0000 Subject: [PATCH 007/129] openwrt master build --- Makefile | 4 ++-- patches/targets-mediatek-mt7622.patch | 13 +++++++++++ patches/targets-ramips-mt7621.patch | 32 ++++++++++----------------- 3 files changed, 27 insertions(+), 22 deletions(-) create mode 100644 patches/targets-mediatek-mt7622.patch diff --git a/Makefile b/Makefile index 26e5410..4b773fa 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build -GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := master #v2022.1.x +GLUON_GIT_URL := https://github.com/maurerle/gluon.git +GLUON_GIT_REF := next #master #v2022.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch new file mode 100644 index 0000000..1b25eff --- /dev/null +++ b/patches/targets-mediatek-mt7622.patch @@ -0,0 +1,13 @@ +diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622 +index 8376c397..7ab6330a 100644 +--- a/targets/mediatek-mt7622 ++++ b/targets/mediatek-mt7622 +@@ -17,3 +17,8 @@ device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', { + factory = false, + }) + ++-- Netgear ++ ++device('netgear-wax206', 'netgear_wax206', { ++ factory_ext = '.img', ++}) diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 0317ff8..bc95f40 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,8 +1,8 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 4e6e1cff..3bef6c52 100644 +index 4e6e1cff..ba01e29e 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -7,6 +7,33 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { +@@ -7,6 +7,25 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { -- Cudy @@ -10,27 +10,19 @@ index 4e6e1cff..3bef6c52 100644 + factory = false, +}) + -+device('cudy-wr1300', 'cudy_wr1300', { -+ factory = false, ++device('cudy-m1800', 'cudy_m1800', { ++ factory = false, +}) + -+--device('cudy-m1800', 'cudy_m1800', { -+-- factory = false, -+--}) -+-- -+--device('cudy-wr1300-v1', 'cudy_wr1300-v1', { -+-- factory = false, -+--}) -+-- -+--device('cudy-wr1300-v2', 'cudy_wr1300-v2', { -+-- factory = false, -+-- manifest_aliases = { -+-- 'cudy-wr1300-v3', -+-- }, -+--}) ++device('cudy-wr1300-v1', 'cudy_wr1300-v1', { ++ factory = false, ++}) + -+device('cudy-wr2100', 'cudy_wr2100', { -+ factory = false, ++device('cudy-wr1300-v2', 'cudy_wr1300-v2', { ++ factory = false, ++ manifest_aliases = { ++ 'cudy-wr1300-v3', ++ }, +}) + device('cudy-wr2100', 'cudy_wr2100', { From 9456ff20830b9e90285dac601b06ef34b709ba42 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 6 Mar 2023 02:57:34 +0100 Subject: [PATCH 008/129] use different segments --- site.conf | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/site.conf b/site.conf index 497796d..e15208c 100644 --- a/site.conf +++ b/site.conf @@ -104,11 +104,47 @@ pubkey_privacy = false, wireguard = { - broker = '01.wg-test.freifunk-aachen.de:8000/api/add_key', + broker = '01.wg-node.freifunk-aachen.de:8000/api/add_key', peers = { - sn01 = { + sn20 = { public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=', - endpoint = '01.wg-test.freifunk-aachen.de:51820' + endpoint = '01.wg-node.freifunk-aachen.de:51820' + }, + sn11 = { + public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=', + endpoint = '01.wg-node.freifunk-aachen.de:51811' + }, + sn12 = { + public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=', + endpoint = '01.wg-node.freifunk-aachen.de:51812' + }, + sn13 = { + public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=', + endpoint = '01.wg-node.freifunk-aachen.de:51813' + }, + sn14 = { + public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=', + endpoint = '01.wg-node.freifunk-aachen.de:51814' + }, + sn15 = { + public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=', + endpoint = '01.wg-node.freifunk-aachen.de:51815' + }, + sn16 = { + public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=', + endpoint = '01.wg-node.freifunk-aachen.de:51816' + }, + sn17 = { + public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=', + endpoint = '01.wg-node.freifunk-aachen.de:51817' + }, + sn18 = { + public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=', + endpoint = '01.wg-node.freifunk-aachen.de:51818' + }, + sn19 = { + public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=', + endpoint = '01.wg-node.freifunk-aachen.de:51819' }, }, mtu = 1406, @@ -181,7 +217,7 @@ 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade', 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade', 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade', - 'http://01.wg-test.freifunk-aachen.de:8080/release_images/from-2022.1.x/experimental/sysupgrade', + 'http://01.wg-node.freifunk-aachen.de/release_images/from-2022.1.x/experimental/sysupgrade', }, good_signatures = 1, pubkeys = { From d484f80d0b6b63587d4c3fb7736ff8b65489fc27 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 6 Mar 2023 02:59:28 +0100 Subject: [PATCH 009/129] better docs for v2023.1.x branch --- README.md | 2 +- site.conf | 20 ++++++++++---------- site.mk | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 5decb83..7b05429 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ This repository contains the site configuration for the Freifunk Aachen Gluon firmware. -This is the `next` branch which is compatible to Gluon master. +This is the `v2023.1.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.1.x once released. Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x. It provides an option to test devices which are available in Gluon's master branch but are not released yet. diff --git a/site.conf b/site.conf index e15208c..5b6a3e4 100644 --- a/site.conf +++ b/site.conf @@ -176,9 +176,9 @@ stable = { name = 'stable', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/stable/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/stable/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/stable/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade', }, good_signatures = 4, pubkeys = { @@ -195,9 +195,9 @@ beta = { name = 'beta', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/beta/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/beta/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/beta/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade', }, good_signatures = 3, pubkeys = { @@ -214,10 +214,10 @@ experimental = { name = 'experimental', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade', - 'http://01.wg-node.freifunk-aachen.de/release_images/from-2022.1.x/experimental/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade', + 'http://01.wg-node.freifunk-aachen.de/release_images/from-2023.1.x/experimental/sysupgrade', }, good_signatures = 1, pubkeys = { diff --git a/site.mk b/site.mk index 23edfcf..1cc6179 100644 --- a/site.mk +++ b/site.mk @@ -39,12 +39,12 @@ GLUON_SITE_PACKAGES := \ # gluon-mesh-wireless-sae # GLUON_FEATURES_standard := wireless-encryption-wpa3 -DEFAULT_GLUON_RELEASE := 2022.1-1~exp$(shell date '+%Y%m%d%H') +DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) -DEFAULT_GLUON_CHECKOUT := v2022.1.x +DEFAULT_GLUON_CHECKOUT := v2023.1.x GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT) From b4c65451e3b6d1215645833bbce9441efd5614e8 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 6 Mar 2023 11:29:22 +0000 Subject: [PATCH 010/129] remove mbedtls from build --- site.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site.mk b/site.mk index 1cc6179..7446133 100644 --- a/site.mk +++ b/site.mk @@ -36,6 +36,9 @@ GLUON_SITE_PACKAGES := \ ff-wg-registration \ respondd-module-airtime +# https://forum.openwrt.org/t/replacing-libustream-mbedtls-and-wpad-basic-mbedtls-packages-with-openssl-variants/153263 +GLUON_SITE_PACKAGES += -wpad-basic-mbedtls -libustream-mbedtls -libmbedtls + # gluon-mesh-wireless-sae # GLUON_FEATURES_standard := wireless-encryption-wpa3 From e4bfe516e0227ed4dc2a6f443853d119d8ba9f65 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Fri, 24 Mar 2023 20:03:14 +0100 Subject: [PATCH 011/129] stay with openssl for sftp for now --- contrib/genpkglist.py | 7 ++++++- site.conf | 2 ++ site.mk | 18 +++++++++++++----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index 234757b..fdef249 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -178,9 +178,13 @@ def render(self): ]) pkglists.append(PKGS_PCI_NET) +PKGS_VIRT = PackageList('VIRT', ['qemu-ga']) +pkglists.append(PKGS_VIRT) + PKGS_TLS = PackageList('TLS', [ 'ca-bundle', - 'libustream-openssl' + 'libustream-openssl', + 'openssh-sftp-server' ]) pkglists.append(PKGS_TLS) @@ -291,6 +295,7 @@ def render(self): add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_PCI). \ add_pkglist(PKGS_PCI_NET). \ + add_pkglist(PKGS_VIRT). \ add_pkglist(PKGS_TLS) targets.get('x86-legacy').add_pkglist(PKGS_TLS) diff --git a/site.conf b/site.conf index 5b6a3e4..c4c0cb7 100644 --- a/site.conf +++ b/site.conf @@ -190,6 +190,7 @@ '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms 'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie + 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle }, }, beta = { @@ -209,6 +210,7 @@ '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms 'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie + 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle }, }, experimental = { diff --git a/site.mk b/site.mk index 7446133..cdb418e 100644 --- a/site.mk +++ b/site.mk @@ -169,13 +169,21 @@ INCLUDE_PCI_NET := \ EXCLUDE_PCI_NET := \ -kmod-bnx2 +INCLUDE_VIRT := \ + qemu-ga + +EXCLUDE_VIRT := \ + -qemu-ga + INCLUDE_TLS := \ ca-bundle \ - libustream-openssl + libustream-openssl \ + openssh-sftp-server EXCLUDE_TLS := \ -ca-bundle \ - -libustream-openssl + -libustream-openssl \ + -openssh-sftp-server ifeq ($(GLUON_TARGET),ath79-generic) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) @@ -309,17 +317,17 @@ ifeq ($(GLUON_TARGET),sunxi-cortexa7) endif ifeq ($(GLUON_TARGET),x86-64) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) endif ifeq ($(GLUON_TARGET),x86-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) endif ifeq ($(GLUON_TARGET),x86-geode) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) endif From 5d134311877d3bb0d451e5a13af2def42bdc762a Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 01:40:09 +0100 Subject: [PATCH 012/129] remove forced package removal - set to v2023 --- Makefile | 2 +- site.mk | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4b773fa..4731981 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/maurerle/gluon.git -GLUON_GIT_REF := next #master #v2022.1.x +GLUON_GIT_REF := next #v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/site.mk b/site.mk index cdb418e..6da0377 100644 --- a/site.mk +++ b/site.mk @@ -36,9 +36,6 @@ GLUON_SITE_PACKAGES := \ ff-wg-registration \ respondd-module-airtime -# https://forum.openwrt.org/t/replacing-libustream-mbedtls-and-wpad-basic-mbedtls-packages-with-openssl-variants/153263 -GLUON_SITE_PACKAGES += -wpad-basic-mbedtls -libustream-mbedtls -libmbedtls - # gluon-mesh-wireless-sae # GLUON_FEATURES_standard := wireless-encryption-wpa3 From f34748258ca54a0585bd0f58d4fa175e185e2b62 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 11:33:00 +0200 Subject: [PATCH 013/129] qemu-ga is only available for x86-64 --- contrib/genpkglist.py | 2 +- site.mk | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index fdef249..d33f52b 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -295,9 +295,9 @@ def render(self): add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_PCI). \ add_pkglist(PKGS_PCI_NET). \ - add_pkglist(PKGS_VIRT). \ add_pkglist(PKGS_TLS) +targets.get('x86-64').add_pkglist(PKGS_VIRT) targets.get('x86-legacy').add_pkglist(PKGS_TLS) if __name__ == '__main__': diff --git a/site.mk b/site.mk index 6da0377..f768eff 100644 --- a/site.mk +++ b/site.mk @@ -319,12 +319,12 @@ ifeq ($(GLUON_TARGET),x86-64) endif ifeq ($(GLUON_TARGET),x86-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) + GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) endif ifeq ($(GLUON_TARGET),x86-geode) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) + GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) endif From 919b5437e1f97c7fb33435dd71e47f3b9d1d71ae Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 11:57:39 +0200 Subject: [PATCH 014/129] add changelog of v2023.1.1 --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7088968..d3b8a17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Freifunk Aachen Firmware Changelog -## v2022.1.x +## v2023.1.x + +## v2023.1.1 + - switch to openwrt master + - remove mbedtls and stay with openssl for now ## v2022.1.11 - add anonymization on status page From 7cc015e7f3fbcdcdf83fd3b95dce950127ba023b Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 11:59:03 +0200 Subject: [PATCH 015/129] experimental update server --- site.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site.conf b/site.conf index c4c0cb7..db3b89c 100644 --- a/site.conf +++ b/site.conf @@ -219,7 +219,7 @@ 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade', 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade', 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade', - 'http://01.wg-node.freifunk-aachen.de/release_images/from-2023.1.x/experimental/sysupgrade', + 'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade', }, good_signatures = 1, pubkeys = { From e501fab6335afe4abc083386ae99cdd0de68e35f Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 14:26:58 +0200 Subject: [PATCH 016/129] use ffac repos --- Makefile | 4 ++-- modules | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 4731981..2b8fcd1 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build -GLUON_GIT_URL := https://github.com/maurerle/gluon.git -GLUON_GIT_REF := next #v2023.1.x +GLUON_GIT_URL := https://github.com/ffac/gluon.git +GLUON_GIT_REF := aa6e677da826a34c3f4a8bbe42a44b22a46e74a7 #next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/modules b/modules index df2f360..fabde48 100644 --- a/modules +++ b/modules @@ -1,6 +1,6 @@ GLUON_SITE_FEEDS="ffac eulenfunk ffho" -PACKAGES_FFAC_REPO=https://github.com/maurerle/gluon-mesh-vpn-wireguard.git +PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860 PACKAGES_FFAC_BRANCH=main From 56f66c5aec8391cfaad48f192d952adf5343250b Mon Sep 17 00:00:00 2001 From: FFAC Date: Sun, 26 Mar 2023 14:10:17 +0000 Subject: [PATCH 017/129] remove duplicate device definition --- patches/targets-ath79-generic.patch | 30 +++-------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index ac2b6fa..6dbeac7 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 1a8ddcc7..c832f0c6 100644 +index a5d0e484..185b811b 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -226,6 +226,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { +@@ -222,6 +222,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { factory_ext = '.img', }) @@ -17,31 +17,7 @@ index 1a8ddcc7..c832f0c6 100644 -- OCEDO -@@ -542,6 +550,23 @@ device('tp-link-wbs210-v1', 'tplink_wbs210-v1', { - }, - }) - -+device('tp-link-re355-v1', 'tplink_re355-v1', { -+ manifest_aliases = { -+ 'tp-link-re355', -- upgrade from OpenWrt 19.07 -+ }, -+ packages = ATH10K_PACKAGES_QCA9880, -+ broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant -+ class = 'tiny', -- Only 6M of usable Firmware space -+}) -+ -+device('tp-link-re450-v1', 'tplink_re450-v1', { -+ packages = ATH10K_PACKAGES_QCA9880, -+ manifest_aliases = { -+ 'tp-link-re450', -- upgrade from OpenWrt 19.07 -+ }, -+ class = 'tiny', -- Only 6M of usable Firmware space -+}) -+ - device('tp-link-wbs210-v2', 'tplink_wbs210-v2') - - device('tp-link-wbs510-v1', 'tplink_wbs510-v1', { -@@ -610,3 +635,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -606,3 +614,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') From fc21bd2b6637cd81c64d1db2c28ead660c0b7ea5 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 26 Mar 2023 17:43:04 +0200 Subject: [PATCH 018/129] add djfe signing key --- site.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/site.conf b/site.conf index db3b89c..6699ec6 100644 --- a/site.conf +++ b/site.conf @@ -191,6 +191,7 @@ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms 'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe }, }, beta = { @@ -211,6 +212,7 @@ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms 'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe }, }, experimental = { @@ -221,7 +223,7 @@ 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade', 'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade', }, - good_signatures = 1, + good_signatures = 2, pubkeys = { 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk) 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM @@ -232,6 +234,7 @@ '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms 'f5790bb64dd695f5f87469c47ecda11e218a35f5da807367110d1cb6354eb005', -- Sellerie 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe }, }, }, From 34e58df353ae67d71606b3b42c04010eac89a005 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 27 Mar 2023 22:27:42 +0200 Subject: [PATCH 019/129] update gluon git ref --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2b8fcd1..5407ea1 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := aa6e677da826a34c3f4a8bbe42a44b22a46e74a7 #next v2023.1.x +GLUON_GIT_REF := c62565e940bf06488b5ab6ab504f24829ce19780 #next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key From 72d67a2754001fc905a6c604edb3ff892525b923 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Sun, 2 Apr 2023 10:57:38 +0200 Subject: [PATCH 020/129] update patches * fix patch issues caused by merge * readd 020-interfaces for FB7530 * improve support for Ubiquiti Rocket 5AC Lite * add cellular support for TP-Link TL-MR6400 v5 * add newline to EOF of site.mk --- patches/010-primary-mac.patch | 13 +----------- patches/020-interfaces.patch | 14 +++++-------- patches/cellular.patch | 30 +++++++++++++++++++++++++++ patches/targets-ath79-generic.patch | 12 ++++++----- patches/targets-ipq40xx-devices.patch | 13 +++--------- site.mk | 2 +- 6 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 patches/cellular.patch diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch index f99fbac..87ddb25 100644 --- a/patches/010-primary-mac.patch +++ b/patches/010-primary-mac.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index 597201f3..44562247 100755 +index b1a1bab..5ce9635 100644 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac @@ -81,6 +81,7 @@ local primary_addrs = { @@ -10,14 +10,3 @@ index 597201f3..44562247 100755 'plasmacloud,pa1200', 'plasmacloud,pa2200', }}, -@@ -90,6 +91,10 @@ local primary_addrs = { - {'lantiq', 'xway', { - 'netgear,dgn3500b', - }}, -+ {'lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+ 'avm,fritz7430', -+ }}, - {'ramips', 'mt7620', { - 'netgear,ex3700', - 'tplink,archer-c2-v1', diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index ce7f6d3..e504aa1 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -1,8 +1,8 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index cf21e907..f9fed670 100755 +index 063ab1a..51150e4 100644 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -67,6 +67,14 @@ elseif platform.match('ramips', 'mt7621', { +@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', { 'netgear,wac104', }) then lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' @@ -10,10 +10,6 @@ index cf21e907..f9fed670 100755 + 'avm,fritz-box-7530', +}) then + lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' -+elseif platform.match('lantiq', 'xrx200', { -+ 'arcadyan,vgv7510kw22-nor', -+}) then -+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' - end - - if wan_ifname and lan_ifname then + elseif platform.match('lantiq', 'xrx200', { + 'arcadyan,vgv7510kw22-nor', + }) then diff --git a/patches/cellular.patch b/patches/cellular.patch new file mode 100644 index 0000000..defcb0f --- /dev/null +++ b/patches/cellular.patch @@ -0,0 +1,30 @@ +diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +index 6debe8c..5e9e161 100644 +--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua ++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +@@ -85,6 +85,10 @@ function M.is_cellular_device() + 'wavlink,ws-wn572hp3-4g', + }) then + return true ++ elseif M.match('ramips', 'mt76x8', { ++ 'tplink,tl-mr6400-v5', ++ }) then ++ return true + end + + return false +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +index b60d8e6..4631d4f 100644 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +@@ -58,6 +58,10 @@ elseif platform.match('ramips', 'mt7621', { + 'wavlink,ws-wn572hp3-4g', + }) then + setup_ncm_qmi('/dev/ttyUSB2', 'ncm', 15) ++elseif platform.match('ramips', 'mt76x8', { ++ 'tplink,tl-mr6400-v5', ++}) then ++ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) + end + + uci:save('network') diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 6dbeac7..eb094ef 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index a5d0e484..185b811b 100644 +index a5d0e48..2ea8ea9 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -222,6 +222,14 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { +@@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { factory_ext = '.img', }) @@ -14,13 +14,15 @@ index a5d0e484..185b811b 100644 + factory_ext = '.img', + aliases = {'netgear-wndr3800chmychart'}, +}) ++ -- OCEDO -@@ -606,3 +614,6 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -606,3 +615,7 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') + -+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite') -+ ++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite'), { ++ packages = ATH10K_PACKAGES_QCA9888, ++}) diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch index 54f0b99..c46416d 100644 --- a/patches/targets-ipq40xx-devices.patch +++ b/patches/targets-ipq40xx-devices.patch @@ -1,16 +1,8 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index 901f7c7e..585580e7 100644 +index 8420a56..cf0023d 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -50,6 +50,7 @@ device('avm-fritz-box-4040', 'avm_fritzbox-4040', { - - device('avm-fritz-box-7530', 'avm_fritzbox-7530', { - factory = false, -+ aliases = {'avm-fritz-box-7520'}, - }) - - device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { -@@ -86,6 +87,14 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -87,6 +87,15 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') @@ -22,6 +14,7 @@ index 901f7c7e..585580e7 100644 + factory = false, + broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+) +}) ++ -- NETGEAR diff --git a/site.mk b/site.mk index 612311b..f768eff 100644 --- a/site.mk +++ b/site.mk @@ -331,4 +331,4 @@ endif ifeq ($(GLUON_TARGET),x86-legacy) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) -endif \ No newline at end of file +endif From 6b51b589763e0e5cdf8a9b93c3866c3ef63a6194 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Tue, 4 Apr 2023 11:58:33 +0200 Subject: [PATCH 021/129] update openwrt master --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1ffd419..c95e99a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := c62565e940bf06488b5ab6ab504f24829ce19780 #next v2023.1.x +GLUON_GIT_REF := 7c71eb5571c516b43d12a896127fee0dff760e40 #next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key From de3dc1b81ace51f4793fd456b39ecf5569e4ba54 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Tue, 11 Apr 2023 18:17:24 +0200 Subject: [PATCH 022/129] remove upstreamed patch (cherry picked from commit 8143877f9ebef078fec4642d07cd07af7ba81101) --- .../0004-vxlan-fix-performance-issues.patch | 100 ------------------ 1 file changed, 100 deletions(-) delete mode 100644 patches/0004-vxlan-fix-performance-issues.patch diff --git a/patches/0004-vxlan-fix-performance-issues.patch b/patches/0004-vxlan-fix-performance-issues.patch deleted file mode 100644 index 58e5cb3..0000000 --- a/patches/0004-vxlan-fix-performance-issues.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 486d735cb74f3c66ba08747de2b1cefc7e63b8d9 Mon Sep 17 00:00:00 2001 -From: CodeFetch -Date: Tue, 22 Dec 2020 04:44:39 +0100 -Subject: [PATCH 1/1] vxlan: fix performance issues - -This commit includes the patches for fixing issue #2155. ---- - ...ance-issues-with-VXLAN-encapsulation.patch | 80 +++++++++++++++++++ - 1 file changed, 80 insertions(+) - create mode 100644 patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch - -diff --git a/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch b/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch -new file mode 100644 -index 00000000..14b4cc78 ---- /dev/null -+++ b/patches/openwrt/9010-kernel-fix-performance-issues-with-VXLAN-encapsulation.patch -@@ -0,0 +1,80 @@ -+From: CodeFetch -+Date: Tue, 22 Dec 2020 04:35:17 +0100 -+Subject: kernel: fix performance issues with VXLAN encapsulation -+ -+VXLAN did not consider the needed headroom of it's lower device which thus -+lead to costly expansions of the headroom. See: -+https://patchwork.ozlabs.org/project/netdev/list/?series=216897 -+ -+This commit includes the needed patches. -+ -+Signed-off-by: Vincent Wiemann -+ -+diff --git a/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch b/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch -+new file mode 100644 -+index 0000000000000000000000000000000000000000..1a380e62289094f0819a058ab07df0e60f0070cd -+--- /dev/null -++++ b/target/linux/generic/pending-4.14/690-vxlan-add_needed_headroom_for_lower_device.patch -+@@ -0,0 +1,35 @@ -++From: Sven Eckelmann -++Subject: [PATCH 1/2] vxlan: Add needed_headroom for lower device -++Date: Thu, 26 Nov 2020 13:52:46 +0100 -++ -++It was observed that sending data via batadv over vxlan (on top of -++wireguard) reduced the performance massively compared to raw ethernet or -++batadv on raw ethernet. A check of perf data showed that the -++vxlan_build_skb was calling all the time pskb_expand_head to allocate -++enough headroom for: -++ -++ min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len -++ + VXLAN_HLEN + iphdr_len; -++ -++But the vxlan_config_apply only requested needed headroom for: -++ -++ lowerdev->hard_header_len + VXLAN6_HEADROOM or VXLAN_HEADROOM -++ -++So it completely ignored the needed_headroom of the lower device. The first -++caller of net_dev_xmit could therefore never make sure that enough headroom -++was allocated for the rest of the transmit path. -++ -++Cc: Annika Wickert -++Signed-off-by: Sven Eckelmann -++Tested-by: Annika Wickert -++Signed-off-by: Vincent Wiemann -++--- a/drivers/net/vxlan.c -+++++ b/drivers/net/vxlan.c -++@@ -3184,6 +3184,7 @@ static void vxlan_config_apply(struct ne -++ dev->gso_max_segs = lowerdev->gso_max_segs; -++ -++ needed_headroom = lowerdev->hard_header_len; -+++ needed_headroom += lowerdev->needed_headroom; -++ -++ max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : -++ VXLAN_HEADROOM); -+diff --git a/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch b/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch -+new file mode 100644 -+index 0000000000000000000000000000000000000000..a02aa2e1d84993b3fc994823978d8aee8dcc482e -+--- /dev/null -++++ b/target/linux/generic/pending-4.14/691-vxlan-copy_needed_tailroom_from_lowerdev.patch -+@@ -0,0 +1,21 @@ -++From: Sven Eckelmann -++Subject: [PATCH 2/2] vxlan: Copy needed_tailroom from lowerdev -++Date: Thu, 26 Nov 2020 13:52:47 +0100 -++ -++While vxlan doesn't need any extra tailroom, the lowerdev might need it. In -++that case, copy it over to reduce the chance for additional (re)allocations -++in the transmit path. -++ -++Signed-off-by: Sven Eckelmann -++Signed-off-by: Vincent Wiemann -++--- a/drivers/net/vxlan.c -+++++ b/drivers/net/vxlan.c -++@@ -3186,6 +3186,8 @@ static void vxlan_config_apply(struct ne -++ needed_headroom = lowerdev->hard_header_len; -++ needed_headroom += lowerdev->needed_headroom; -++ -+++ dev->needed_tailroom = lowerdev->needed_tailroom; -+++ -++ max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : -++ VXLAN_HEADROOM); -++ if (max_mtu < ETH_MIN_MTU) --- -2.29.2 - From 6b8c19cc6bb183e526c0bea461e20072e276845e Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 11 Apr 2023 19:44:03 +0000 Subject: [PATCH 023/129] remove autoupdater-wifi-fallback --- site.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site.mk b/site.mk index f768eff..c2de233 100644 --- a/site.mk +++ b/site.mk @@ -27,12 +27,12 @@ GLUON_FEATURES := \ #ffac-status-page # custom status page without contact information +# ffho-autoupdater-wifi-fallback \ GLUON_SITE_PACKAGES := \ iwinfo \ eulenfunk-hotfix \ gluon-ssid-changer \ gluon-weeklyreboot \ - ffho-autoupdater-wifi-fallback \ ff-wg-registration \ respondd-module-airtime From b483c570d609ead2a68d385f37ac6ebe94724fd8 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Tue, 11 Apr 2023 22:17:49 +0200 Subject: [PATCH 024/129] update wan ifname for fb7530 --- patches/020-interfaces.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index e504aa1..2994d79 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -9,7 +9,7 @@ index 063ab1a..51150e4 100644 +elseif platform.match('ipq40xx', 'generic', { + 'avm,fritz-box-7530', +}) then -+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' ++ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' elseif platform.match('lantiq', 'xrx200', { 'arcadyan,vgv7510kw22-nor', }) then From c07aabf9b623d69431954bdf7b432b0d26194920 Mon Sep 17 00:00:00 2001 From: FFAC Date: Wed, 12 Apr 2023 00:24:07 +0000 Subject: [PATCH 025/129] fix ath79-generic --- patches/targets-ath79-generic.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index eb094ef..0638d68 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index a5d0e48..2ea8ea9 100644 +index a5d0e484..55ccf959 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic @@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { @@ -23,6 +23,6 @@ index a5d0e48..2ea8ea9 100644 device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') + -+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite'), { ++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { + packages = ATH10K_PACKAGES_QCA9888, +}) From 26b89c2bed953fb2a50e243ecbb695bb3390d312 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Wed, 12 Apr 2023 20:38:28 +0200 Subject: [PATCH 026/129] Revert "update wan ifname for fb7530" This reverts commit b483c570d609ead2a68d385f37ac6ebe94724fd8. --- patches/020-interfaces.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index 2994d79..e504aa1 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -9,7 +9,7 @@ index 063ab1a..51150e4 100644 +elseif platform.match('ipq40xx', 'generic', { + 'avm,fritz-box-7530', +}) then -+ lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' ++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' elseif platform.match('lantiq', 'xrx200', { 'arcadyan,vgv7510kw22-nor', }) then From dc5fcd48c4619d75d7dfcda232c9bf3b2edf52ee Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Wed, 12 Apr 2023 20:40:07 +0200 Subject: [PATCH 027/129] add config-roles-ui patch --- patches/config-roles-ui.patch | 810 ++++++++++++++++++++++++++++++++++ 1 file changed, 810 insertions(+) create mode 100644 patches/config-roles-ui.patch diff --git a/patches/config-roles-ui.patch b/patches/config-roles-ui.patch new file mode 100644 index 0000000..497f618 --- /dev/null +++ b/patches/config-roles-ui.patch @@ -0,0 +1,810 @@ +From f26d0c28df8189192ca1e4108c33362afc5fd81b Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Fri, 15 Apr 2022 00:44:39 +0200 +Subject: [PATCH 01/15] gluon-web-model: add MultiListValue class + +--- + .luacheckrc | 1 + + .../gluon/config-mode/www/static/gluon.css | 2 +- + .../gluon-config-mode-theme/sass/gluon.scss | 7 +++ + .../lib/gluon/web/view/model/mlvalue.html | 23 +++++++ + .../usr/lib/lua/gluon/web/model/classes.lua | 60 +++++++++++++++++++ + 5 files changed, 92 insertions(+), 1 deletion(-) + create mode 100644 package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html + +diff --git a/.luacheckrc b/.luacheckrc +index 2f491ca253..0f17ecc565 100644 +--- a/.luacheckrc ++++ b/.luacheckrc +@@ -50,6 +50,7 @@ files["package/**/check_site.lua"] = { + + files["package/**/luasrc/lib/gluon/config-mode/*"] = { + globals = { ++ "MultiListValue", + "DynamicList", + "Flag", + "Form", +diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css +index c84ac01bed..296dc49a39 100644 +--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css ++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css +@@ -1 +1 @@ +-html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} ++html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} +diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss +index 575af4f926..3af8d5e000 100644 +--- a/package/gluon-config-mode-theme/sass/gluon.scss ++++ b/package/gluon-config-mode-theme/sass/gluon.scss +@@ -366,6 +366,13 @@ input[type=password] { + min-width: 20em; + } + ++.gluon-multi-list-option-descr { ++ display: inline-block; ++ vertical-align: top; ++ margin-top: 0.35em; ++ margin-left: 0.4em; ++} ++ + .gluon-button { + @include button; + +diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html +new file mode 100644 +index 0000000000..a65eda7449 +--- /dev/null ++++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html +@@ -0,0 +1,23 @@ ++<% ++ local br = self.orientation == "horizontal" and '   ' or '
' ++ local entries = self:entries() ++ local util = require 'gluon.util' ++%> ++
++ <% for i, entry in pairs(entries) do %> ++ > ++ > ++ > ++ <%|entry.value%> ++ ++ <% if i ~= #entries then write(br) end %> ++ <% end %> ++
+diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +index 93279c3b61..64906d6bb5 100644 +--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua ++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +@@ -361,6 +361,66 @@ function ListValue:validate() + end + + ++local MultiListValue = class(AbstractValue) ++M.MultiListValue = MultiListValue ++ ++function MultiListValue:__init__(...) ++ AbstractValue.__init__(self, ...) ++ self.subtemplate = "model/mlvalue" ++ ++ self.size = 1 ++ ++ self.keys = {} ++ self.entry_list = {} ++end ++ ++function MultiListValue:value(key, val, ...) ++ key = tostring(key) ++ ++ if self.keys[key] then ++ return ++ end ++ self.keys[key] = true ++ ++ val = val or key ++ table.insert(self.entry_list, { ++ key = key, ++ value = tostring(val), ++ deps = {...}, ++ }) ++end ++ ++function MultiListValue:entries() ++ local ret = {unpack(self.entry_list)} ++ ++ return ret ++end ++ ++function MultiListValue:validate() ++ for _, val in ipairs(self.data) do ++ if not self.keys[val] then ++ return false ++ end ++ end ++ ++ return true ++end ++ ++function MultiListValue:defaultvalue() ++ local value = self.default ++ ++ if type(value) == "table" then ++ return value ++ else ++ return { value } ++ end ++end ++ ++function MultiListValue:formvalue(http) ++ return http:formvaluetable(self:id()) ++end ++ ++ + local DynamicList = class(AbstractValue) + M.DynamicList = DynamicList + + +From be8462048915941f20f58e16f4391b54c49cc5d6 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Fri, 15 Apr 2022 02:02:44 +0200 +Subject: [PATCH 02/15] gluon-web-network: initial draft of role configuration + +--- + .../gluon/config-mode/model/admin/network.lua | 45 +++++++------------ + 1 file changed, 16 insertions(+), 29 deletions(-) + +diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +index df92c96590..33bf44ae20 100644 +--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua ++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +@@ -9,13 +9,12 @@ http://www.apache.org/licenses/LICENSE-2.0 + ]]-- + + local uci = require("simple-uci").cursor() +-local sysconfig = require 'gluon.sysconfig' +-local util = require 'gluon.util' + + local wan = uci:get_all("network", "wan") + local wan6 = uci:get_all("network", "wan6") + local dns_static = uci:get_first("gluon-wan-dnsmasq", "static") + ++ + local f = Form(translate("WAN connection")) + + local s = f:section(Section) +@@ -76,36 +75,23 @@ end + + s = f:section(Section) + +-local wired_mesh_help = { +- single = translate('Enable meshing on the Ethernet interface'), +- wan = translate('Enable meshing on the WAN interface'), +- lan = translate('Enable meshing on the LAN interface'), +-} +- +-local function wired_mesh(iface) +- if not sysconfig[iface .. '_ifname'] then return end +- local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role') +- +- local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface]) +- option.default = util.contains(iface_roles, 'mesh') ~= false +- +- function option:write(data) +- local roles = uci:get_list('gluon', 'iface_' .. iface, 'role') +- if data then +- util.add_to_set(roles, 'mesh') +- else +- util.remove_from_set(roles, 'mesh') +- end +- uci:set_list('gluon', 'iface_' .. iface, 'role', roles) ++uci:foreach('gluon', 'interface', function(config) ++ local section_name = config['.name'] ++ local ifaces = s:option(MultiListValue, section_name, config.name) ++ ++ ifaces.widget = 'radio' ++ ifaces.orientation = 'horizontal' ++ ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive. ++ ifaces:value('mesh', 'Mesh') ++ ifaces:value('client', 'Client') ++ ++ ifaces.default = config.role + +- -- Reconfigure on next reboot +- uci:set('gluon', 'core', 'reconfigure', true) ++ function ifaces:write(data) ++ uci:set_list("gluon", section_name, "role", data) + end +-end ++end) + +-wired_mesh('single') +-wired_mesh('wan') +-wired_mesh('lan') + + local section + uci:foreach("system", "gpio_switch", function(si) +@@ -166,4 +152,5 @@ function f:write() + uci:commit('system') + end + ++ + return f + +From 76e239665152d9584ebb8c1b109815a52e98669f Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 30 Oct 2022 14:15:34 +0100 +Subject: [PATCH 03/15] gluon-web-network: show pretty interface names + +--- + .../lib/gluon/config-mode/model/admin/network.lua | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +index 33bf44ae20..cf1d323757 100644 +--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua ++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +@@ -75,13 +75,19 @@ end + + s = f:section(Section) + ++local pretty_ifnames = { ++ ["/wan"] = translate("WAN-Interfaces"), ++ ["/single"] = translate("Interface"), ++ ["/lan"] = translate("LAN-Interfaces") ++} ++ + uci:foreach('gluon', 'interface', function(config) + local section_name = config['.name'] +- local ifaces = s:option(MultiListValue, section_name, config.name) ++ local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name) + + ifaces.widget = 'radio' + ifaces.orientation = 'horizontal' +- ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive. ++ ifaces:value('uplink', 'Uplink') + ifaces:value('mesh', 'Mesh') + ifaces:value('client', 'Client') + + +From 98db33babc5edc50fb273bc8d232f42ce34ce0ca Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Wed, 4 Jan 2023 22:12:56 +0100 +Subject: [PATCH 04/15] gluon-web-model: uglify flag --support-ie8 is now --ie + +From uglify 3.14.0 on, this command is called --ie: + +https://github.com/mishoo/UglifyJS/commit/ef5f7fc25e93833396540cf7479685b241bd1b8f +--- + package/gluon-web-model/javascript/gluon-web-model.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js +index ec9cdc4af3..9e8a11b9d2 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.js +@@ -13,7 +13,7 @@ + /* + Build using: + +- uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --support-ie8 ++ uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --ie + */ + + + +From f489885f0cbf2b94c260f1193eb4d36eec6d4198 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Fri, 6 May 2022 04:15:41 +0200 +Subject: [PATCH 05/15] gluon-web-model: add exclusive options for + MultiListValue + +--- + .../gluon/config-mode/www/static/gluon.css | 2 +- + .../gluon-config-mode-theme/sass/gluon.scss | 4 ++++ + .../lib/gluon/web/view/model/mlvalue.html | 4 +++- + .../javascript/gluon-web-model.js | 15 ++++++++++++ + .../javascript/gluon-web-model.min.js | 2 +- + .../usr/lib/lua/gluon/web/model/classes.lua | 24 +++++++++++++++++++ + 6 files changed, 48 insertions(+), 3 deletions(-) + +diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css +index 296dc49a39..d239fd8f1e 100644 +--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css ++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css +@@ -1 +1 @@ +-html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} ++html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=checkbox][disabled]+label{background-color:#dcdcdc !important}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} +diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss +index 3af8d5e000..a63156e430 100644 +--- a/package/gluon-config-mode-theme/sass/gluon.scss ++++ b/package/gluon-config-mode-theme/sass/gluon.scss +@@ -273,6 +273,10 @@ input[type=checkbox] { + text-align: center; + font-size: 1.7em; + } ++ ++ &[disabled] + label { ++ background-color: #dcdcdc !important; ++ } + } + + input[type=radio] { +diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html +index a65eda7449..0a4fb5c9db 100644 +--- a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html ++++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html +@@ -13,7 +13,9 @@ + attr("id", id.."."..entry.key) .. + attr("name", id) .. + attr("value", entry.key) .. +- attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") ++ attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") .. ++ attr("data-exclusive-with", self.exclusions[entry.key]) .. ++ attr("data-update", "change") + %>> + > + <%|entry.value%> +diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js +index 9e8a11b9d2..ce8ad6478a 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.js +@@ -219,6 +219,20 @@ + parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : ''; + } + ++ var nodes = document.querySelectorAll('[data-exclusive-with]'); ++ for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { ++ var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with')); ++ ++ node.disabled = false; ++ for (let list_item of excusive_with) { ++ var el = document.getElementById(node.name + '.' + list_item); ++ node.disabled |= el.checked; ++ } ++ ++ if (node.disabled) ++ node.checked = false; ++ } ++ + if (state) { + update(); + } +@@ -533,6 +547,7 @@ + init_dynlist(node, attr); + } + ++ + update(); + })(); + })(); +diff --git a/package/gluon-web-model/javascript/gluon-web-model.min.js b/package/gluon-web-model/javascript/gluon-web-model.min.js +index 07478cbb02..2adf363f08 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.min.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.min.js +@@ -1 +1 @@ +-!function(){var v={};function a(e){return/^-?\d+$/.test(e)?+e:NaN}function r(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}var u={integer:function(){return!isNaN(a(this))},uinteger:function(){return 0<=a(this)},float:function(){return!isNaN(r(this))},ufloat:function(){return 0<=r(this)},ipaddr:function(){return u.ip4addr.apply(this)||u.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(0<=e[1]&&e[1]<=255&&0<=e[2]&&e[2]<=255&&0<=e[3]&&e[3]<=255&&0<=e[4]&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(0<=this.indexOf(":::")||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):8<=e.length&&e.length<=63},range:function(e,t){var n=r(this);return+e<=n&&n<=+t},min:function(e){return r(this)>=+e},max:function(e){return r(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function o(e){for(var t=0;tn.index);i=i.nextSibling);i?r.insertBefore(n.node,i):r.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),e=!0}r&&r.parentNode&&r.getAttribute("data-optionals")&&(r.parentNode.style.display=r.options.length<=1?"none":"")}e&&h()}function g(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function m(l,s){var c=s.prefix;function o(e,t,n){for(var a=[];l.firstChild;){var r=l.firstChild;(i=+r.index)!=n&&("input"==r.nodeName.toLowerCase()?a.push(r.value||""):"select"==r.nodeName.toLowerCase()&&(a[a.length-1]=r.options[r.selectedIndex].value)),l.removeChild(r)}0<=t?(e=t+1,a.splice(t,0,"")):s.optional||0!=a.length||a.push("");for(var i=1;i<=a.length;i++){var o=document.createElement("input");if(o.id=c+"."+i,o.name=c,o.value=a[i-1],o.type="text",o.index=i,s.size&&(o.size=s.size),s.placeholder&&(o.placeholder=s.placeholder),l.appendChild(o),s.type&&y(o,!1,s.type),g(o,"keydown",f),g(o,"keypress",p),i==e)o.focus();else if(-i==e){o.focus();var d=o.value;o.value=" ",o.value=d}if(s.optional||1=+e},max:function(e){return i(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function p(e){for(var t,n,a,i=0;in.index);r=r.nextSibling);r?i.insertBefore(n.node,r):i.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),t=!0}i&&i.parentNode&&i.getAttribute("data-optionals")&&(i.parentNode.style.display=i.options.length<=1?"none":"")}for(var d=document.querySelectorAll("[data-exclusive-with]"),o=0;(a=d[o])!==undefined;o++){var u,l=JSON.parse(a.getAttribute("data-exclusive-with"));a.disabled=!1;for(u of l){var c=document.getElementById(a.name+"."+u);a.disabled|=c.checked}a.disabled&&(a.checked=!1)}t&&f()}function v(e,t,n,a){e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)})}function m(t,n,e){var a,i,r=(i=(e=e).match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2],i[3]])}:(i=e.match(/^([^\(]+)\(([^,\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2]])}:d[e];r&&(v(t,"blur",e=function(){var e;t.form&&(t.className=t.className.replace(/ gluon-input-invalid/g,""),0==(e=(t.options&&-1 +Date: Fri, 6 May 2022 04:16:05 +0200 +Subject: [PATCH 06/15] gluon-web-network: make roles "uplink" / "mesh" and + "client" exclusive + +--- + .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +index cf1d323757..73bf555fea 100644 +--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua ++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +@@ -90,6 +90,8 @@ uci:foreach('gluon', 'interface', function(config) + ifaces:value('uplink', 'Uplink') + ifaces:value('mesh', 'Mesh') + ifaces:value('client', 'Client') ++ ifaces:exclusive('uplink', 'client') ++ ifaces:exclusive('mesh', 'client') + + ifaces.default = config.role + + +From 4c2027943b08e08e45eb92303a836d0dbf2cdebb Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Fri, 16 Dec 2022 00:29:29 +0100 +Subject: [PATCH 07/15] gluon-core: fix invalid role configurations during + reconfigure + +--- + .../luasrc/lib/gluon/upgrade/021-interface-roles | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles +index 5d27fb708b..6e39219a69 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles +@@ -63,4 +63,19 @@ for iface in pairs(interfaces) do + end + end + ++-- Fix invalid role configurations ++ ++uci:foreach('gluon', 'interface', function(interface) ++ ++ local function has_role(role) ++ return util.contains(interface.role, role) ++ end ++ ++ if has_role('client') and (has_role('mesh') or has_role('uplink')) then ++ -- remove 'client' role ++ util.remove_from_set(interface.role, 'client') ++ uci:set('gluon', interface['.name'], 'role', interface.role) ++ end ++end) ++ + uci:save('gluon') + +From c00bf47077384b9cd08eef5693b12668bedaf1cd Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Fri, 16 Dec 2022 00:44:48 +0100 +Subject: [PATCH 08/15] docs: explain that invalid interface roles are removed + +--- + docs/user/site.rst | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/docs/user/site.rst b/docs/user/site.rst +index fc82f314d2..96bb5eacff 100644 +--- a/docs/user/site.rst ++++ b/docs/user/site.rst +@@ -448,13 +448,8 @@ interfaces \: optional + The ``client`` role requires exclusive control over an interface. When + the ``client`` role is assigned to an interface at the same time as other + roles (like ``'client', 'mesh'`` in the above example), the other roles take +- precedence (enabling ``mesh``, but not ``client`` in the example). +- +- Such a default configuration still fulfills a purpose (and is in fact the +- recommended way to enable "Mesh-on-LAN" by default): The "LAN interface +- meshing" checkbox in the advanced network settings will only add or remove +- the ``mesh`` role, so the ``client`` role must already be in the configuration +- to make the LAN port a regular client interface when the checkbox is disabled. ++ precedence (enabling ``mesh``, but not ``client`` in the example). In that ++ case, the ``client`` role is removed from the config of the interface. + + All interface settings are optional. If unset, the following defaults are + used: + +From e44e0bca94fafd508d4f65ca632950fb3e1d303c Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:49:08 +0100 +Subject: [PATCH 09/15] fixup! gluon-web-network: initial draft of role + configuration + +--- + .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +index 73bf555fea..1a50147b86 100644 +--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua ++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +@@ -85,7 +85,6 @@ uci:foreach('gluon', 'interface', function(config) + local section_name = config['.name'] + local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name) + +- ifaces.widget = 'radio' + ifaces.orientation = 'horizontal' + ifaces:value('uplink', 'Uplink') + ifaces:value('mesh', 'Mesh') + +From a9ab6815f7a679bfa637b821c1f8b46a3de8fe05 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:53:28 +0100 +Subject: [PATCH 10/15] fixup! gluon-web-model: add exclusive options for + MultiListValue + +--- + package/gluon-web-model/javascript/gluon-web-model.js | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js +index ce8ad6478a..4c9dd72e19 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.js +@@ -547,7 +547,6 @@ + init_dynlist(node, attr); + } + +- + update(); + })(); + })(); + +From 63d99fad284da8807af2730e0859e4332d276ee5 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:53:36 +0100 +Subject: [PATCH 11/15] fixup! gluon-web-model: add exclusive options for + MultiListValue + +--- + package/gluon-web-model/javascript/gluon-web-model.js | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js +index 4c9dd72e19..7b98dc1ef3 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.js +@@ -224,7 +224,7 @@ + var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with')); + + node.disabled = false; +- for (let list_item of excusive_with) { ++ for (var list_item of excusive_with) { + var el = document.getElementById(node.name + '.' + list_item); + node.disabled |= el.checked; + } + +From af3b1ce4736c9df58c33da84137cafdf8daf2e3d Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:24:10 +0100 +Subject: [PATCH 12/15] gluon-core: make interface roles exclusive in site + config + +--- + .luacheckrc | 1 + + package/gluon-core/check_site.lua | 6 +++++- + .../luasrc/lib/gluon/check-site.lua | 21 +++++++++++++++++++ + 3 files changed, 27 insertions(+), 1 deletion(-) + +diff --git a/.luacheckrc b/.luacheckrc +index 0f17ecc565..9639097284 100644 +--- a/.luacheckrc ++++ b/.luacheckrc +@@ -29,6 +29,7 @@ files["package/**/check_site.lua"] = { + "need", + "need_alphanumeric_key", + "need_array", ++ "need_array_elements_exclusive", + "need_array_of", + "need_boolean", + "need_chanlist", +diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua +index 06b9ac59d0..9918984ecc 100644 +--- a/package/gluon-core/check_site.lua ++++ b/package/gluon-core/check_site.lua +@@ -77,7 +77,11 @@ need_boolean(in_domain({'mesh', 'vxlan'}), false) + + local interfaces_roles = {'client', 'uplink', 'mesh'} + for _, config in ipairs({'wan', 'lan', 'single'}) do +- need_array_of(in_site({'interfaces', config, 'default_roles'}), interfaces_roles, false) ++ local default_roles = in_site({'interfaces', config, 'default_roles'}) ++ ++ need_array_of(default_roles, interfaces_roles, false) ++ need_array_elements_exclusive(default_roles, "client", "mesh", false) ++ need_array_elements_exclusive(default_roles, "client", "uplink", false) + end + + obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.') +diff --git a/package/gluon-core/luasrc/lib/gluon/check-site.lua b/package/gluon-core/luasrc/lib/gluon/check-site.lua +index 148f4968f7..2172a984c7 100644 +--- a/package/gluon-core/luasrc/lib/gluon/check-site.lua ++++ b/package/gluon-core/luasrc/lib/gluon/check-site.lua +@@ -55,6 +55,14 @@ local function merge(a, b) + return m + end + ++local function contains(table, val) ++ for i=1,#table do ++ if table[i] == val then ++ return true ++ end ++ end ++ return false ++end + + local function path_to_string(path) + if path.is_value then +@@ -370,6 +378,19 @@ function M.need_array_of(path, array, required) + return M.need_array(path, function(e) M.need_one_of(e, array) end, required) + end + ++function M.need_array_elements_exclusive(path, a, b, required) ++ local val = need_type(path, 'table', required, 'be an array') ++ if not val then ++ return nil ++ end ++ ++ if contains(val, a) and contains(val, b) then ++ config_error(conf_src(path), 'expected %s to contain either "%s" or "%s", but not both.', path_to_string(path), a, b) ++ end ++ ++ return val ++end ++ + function M.need_chanlist(path, channels, required) + local valid_chanlist = check_chanlist(channels) + return M.need(path, valid_chanlist, required, + +From 77075b29fc8107938759e78485fb27cfc2aa689c Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:55:21 +0100 +Subject: [PATCH 13/15] fixup! gluon-web-model: add MultiListValue class + +--- + .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +index 31b46476f1..74a4181b87 100644 +--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua ++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +@@ -431,13 +431,7 @@ function MultiListValue:exclusive(a, b) + end + + function MultiListValue:defaultvalue() +- local value = self.default +- +- if type(value) == "table" then +- return value +- else +- return { value } +- end ++ return self.default or {} + end + + function MultiListValue:formvalue(http) + +From 544266af9a22bfe7af2cea9bb9cbdd4220964f22 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:43:17 +0100 +Subject: [PATCH 14/15] gluon-web-model: migrate to SPDX headers for licensing + +--- + .../gluon-web-model/javascript/gluon-web-model.js | 14 +++++--------- + .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 7 ++++--- + .../usr/lib/lua/gluon/web/model/datatypes.lua | 6 +++--- + 3 files changed, 12 insertions(+), 15 deletions(-) + +diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js +index 7b98dc1ef3..55c68e2e87 100644 +--- a/package/gluon-web-model/javascript/gluon-web-model.js ++++ b/package/gluon-web-model/javascript/gluon-web-model.js +@@ -1,13 +1,9 @@ + /* +- Copyright 2008 Steven Barth +- Copyright 2008-2012 Jo-Philipp Wich +- Copyright 2017 Matthias Schiffer +- +- Licensed under the Apache License, Version 2.0 (the "License"); +- you may not use this file except in compliance with the License. +- You may obtain a copy of the License at +- +- http://www.apache.org/licenses/LICENSE-2.0 ++ SPDX-License-Identifier: Apache-2.0 ++ SPDX-FileCopyrightText: 2008, Steven Barth ++ SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich ++ SPDX-FileCopyrightText: 2017, Matthias Schiffer ++ SPDX-FileCopyrightText: 2023, Leonardo Mörlein + */ + + /* +diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +index 74a4181b87..1b2e5f5c2b 100644 +--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua ++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua +@@ -1,6 +1,7 @@ +--- Copyright 2008 Steven Barth +--- Copyright 2017-2018 Matthias Schiffer +--- Licensed to the public under the Apache License 2.0. ++-- SPDX-License-Identifier: Apache-2.0 ++-- SPDX-FileCopyrightText: 2008, Steven Barth ++-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer ++-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein + + local util = require "gluon.web.util" + local gluon_util = require "gluon.util" +diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua +index fdee7d7dbe..31c1aa82fc 100644 +--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua ++++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua +@@ -1,6 +1,6 @@ +--- Copyright 2010 Jo-Philipp Wich +--- Copyright 2017 Matthias Schiffer +--- Licensed to the public under the Apache License 2.0. ++-- SPDX-License-Identifier: Apache-2.0 ++-- SPDX-FileCopyrightText: 2010, Jo-Philipp Wich ++-- SPDX-FileCopyrightText: 2017, Matthias Schiffer + + local M = {} + + +From 88c976a7f3afa576fce5388ea98a10bc853e51b4 Mon Sep 17 00:00:00 2001 +From: lemoer +Date: Sun, 26 Feb 2023 22:46:23 +0100 +Subject: [PATCH 15/15] gluon-web-network: migrate to SPDX headers for + licensing + +--- + .../lib/gluon/config-mode/model/admin/network.lua | 12 +++--------- + 1 file changed, 3 insertions(+), 9 deletions(-) + +diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +index 1a50147b86..1c0b34721b 100644 +--- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua ++++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua +@@ -1,12 +1,6 @@ +---[[ +-Copyright 2014 Nils Schneider +- +-Licensed under the Apache License, Version 2.0 (the "License"); +-you may not use this file except in compliance with the License. +-You may obtain a copy of the License at +- +-http://www.apache.org/licenses/LICENSE-2.0 +-]]-- ++-- SPDX-License-Identifier: Apache-2.0 ++-- SPDX-FileCopyrightText: 2014, Nils Schneider ++-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein + + local uci = require("simple-uci").cursor() + From a39699b666f26b70dc5a12ad97b6b439218cc9c8 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 00:17:00 +0200 Subject: [PATCH 028/129] update translation --- i18n/de.po | 26 +++++++++++++++++++++----- i18n/en.po | 25 ++++++++++++++++++++----- i18n/fr.po | 31 ++++++++++++------------------- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/i18n/de.po b/i18n/de.po index cf1cc21..f382596 100644 --- a/i18n/de.po +++ b/i18n/de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2022-12-13\n" +"PO-Revision-Date: 2023-04-14\n" "Last-Translator: Felix Baumann \n" "Language-Team: German\n" "Language: de\n" @@ -21,10 +21,15 @@ msgid "gluon-config-mode:pubkey" msgstr "" "

Bitte stecke nun das Netzwerkkabel vom LAN-Port in den WAN-Port deines Routers, sofern er mehrere Netzwerkanschlüsse hat.
" "Das andere Kabelende muss an einen LAN-Port deines Heimnetzes angeschlossen werden.

" -"

Dies ist der öffentliche Schlüssel deines Freifunk-Knotens: <%= pubkey %>
" -"Wenn du nicht weißt, worum es sich dabei handelt, kannst du ihn ignorieren. " -"Wer sich auskennt kann damit dafür sorgen, dass sich der neue Freifunk-Knoten von Anfang an zum richtigen Segment unseres Netzes verbindet.

" -"

Dabei helfen dir auch der Knotenname: (<%=pcdata(hostname)%>) und die MAC-Adresse: (<%= sysconfig.primary_mac %>)

" +"

Details zu deinem Knoten:
" +"Knotenname: <%=pcdata(hostname)%>
" +"MAC-Adresse: <%= sysconfig.primary_mac %>
" +"Öffentlicher Schlüssel: <%= pubkey %>

" + +msgid "gluon-config-mode:novpn" +msgstr "" +"

Du hast dich entschieden, das VPN-Netzwerk nicht zu nutzen. " +"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben.

msgid "gluon-config-mode:reboot" msgstr "" @@ -34,3 +39,14 @@ msgstr "" "

Um zu dieser Konfigurationsseite zurückzugelangen, drücke im normalen Betrieb für drei Sekunden den Reset-Button. " "Das Gerät wird dann im Config Mode neustarten.

" "

Viel Spaß bei der Erkundung von Freifunk!

" + +# Leave empty to use the default text, which can be found in: +# package/gluon-config-mode-contact-info/i18n/ +msgid "gluon-config-mode:contact-help" +msgstr "" +"

Bitte hinterlege hier einen Hinweis, um uns zu ermöglichen, Kontakt mit " +"dir aufzunehmen. Diese Information ist nur den Betreibern des lokalen Freifunknetzes " +"zugänglich, um für wichtige Mitteilungen Kontakt aufnehmen zu können. " +"Für den Betrieb des Freifunk-Knotens sind diese Informationen nicht erforderlich. " +"Die Kontaktdaten können durch dich in diesem Menü eigenständig gelöscht oder " +"angepasst werden.

" diff --git a/i18n/en.po b/i18n/en.po index c517803..6f6a822 100644 --- a/i18n/en.po +++ b/i18n/en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2022-12-13\n" +"PO-Revision-Date: 2023-04-14\n" "Last-Translator: Felix Baumann \n" "Language-Team: English\n" "Language: en\n" @@ -20,11 +20,16 @@ msgid "gluon-config-mode:pubkey" msgstr "" "

Please plug the network cable from the lan into the wan port of your router, in-case it has multible network ports.
" "The other end of the cable must be plugged into a LAN port of your home network.

" -"

This is your Freifunk node's public key: <%= pubkey %>
" -"If you don't know what this is for, you can safely ignore it. " -"If you are familiar with the matter, you can use it to ensure that your new freifunk node connects to the right network segment from the start.

" -"

The node's name: (<%=pcdata(hostname)%>) and MAC address: (<%= sysconfig.primary_mac %>) might be of use as well.

" +"

Details about your node:
" +"Node name: <%=pcdata(hostname)%>
" +"MAC address: <%= sysconfig.primary_mac %>
" +"Public key: <%= pubkey %>

" +msgid "gluon-config-mode:novpn" +msgstr "" +"

You have chosen to not use" +" the VPN network. Your node will only be able to connect to the Freifunk network if " +"other nodes in range already have a connection.

" msgid "gluon-config-mode:reboot" msgstr "" @@ -37,3 +42,13 @@ msgstr "" "three seconds during normal operation. The device will then reboot into config " "mode.

" "

Have fun with your node and exploring the Freifunk network!

" + +# Leave empty to use the default text, which can be found in: +# package/gluon-config-mode-contact-info/i18n/ +msgid "gluon-config-mode:contact-help" +msgstr "" +"

Please provide your contact information here to allow us to contact you. " +"This information is only accessible to the operators of the local Freifunk " +"network and allows them to be able to contact you when there's anything important. " +"This field is not required to operate a node. " +"You can delete or modify the contact information yourself in this menu.

" diff --git a/i18n/fr.po b/i18n/fr.po index 7d91e99..2e54c40 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2015-08-06 20:28+0100\n" -"Last-Translator: Tobias Bernot \n" +"PO-Revision-Date: 2023-04-14\n" +"Last-Translator: Felix Baumann \n" "Language-Team: French\n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -26,7 +26,12 @@ msgstr "Ici, vous avez la possibilité de sélectionner le domaine dans lequel " msgid "gluon-config-mode:pubkey" msgstr "" -" " +"

Branchez le câble réseau du LAN dans le port WAN de votre routeur, au cas où celui-ci disposerait de plusieurs ports réseau.
" +"L'autre extrémité du câble doit être branchée sur un port LAN de votre réseau domestique.

" +"

Détails sur votre nœud:
" +"Nom du nœud: <%=pcdata(hostname)%>
" +"Adresse MAC: <%= sysconfig.primary_mac %>
" +"Clé publique: <%= pubkey %>

" msgid "gluon-config-mode:novpn" msgstr "" @@ -46,23 +51,11 @@ msgstr "" "ensuite redémarer en mode configuration.

" "

Profitez votre de nœud et amusez vous à découvrir le réseau Freifunk!

" -# Leave empty to use the default text, which can be found in: -# package/gluon-config-mode-hostname/i18n/ -msgid "gluon-config-mode:hostname-help" -msgstr "" - -# Leave empty to use the default text, which can be found in: -# package/gluon-config-mode-geo-location/i18n/ -msgid "gluon-config-mode:geo-location-help" -msgstr "" - -msgid "gluon-config-mode:altitude-label" -msgstr "" - # Leave empty to use the default text, which can be found in: # package/gluon-config-mode-contact-info/i18n/ msgid "gluon-config-mode:contact-help" msgstr "" - -msgid "gluon-config-mode:contact-note" -msgstr "" +"

Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. " +Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. " +Ce champ n'est pas nécessaire pour exploiter un nœud. " +Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.

" \ No newline at end of file From 375de980d340eddc519278efa0ba9029f4dccd0f Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 00:33:01 +0200 Subject: [PATCH 029/129] update v2023 Makefile and devices --- Makefile | 7 ++++--- patches/020-interfaces.patch | 2 +- patches/targets-ipq40xx-devices.patch | 10 +++++++-- patches/targets-ramips-mt7621.patch | 29 +++++++++++++++++---------- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index c95e99a..f4fe39a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := 7c71eb5571c516b43d12a896127fee0dff760e40 #next v2023.1.x +GLUON_GIT_REF := 53dce4944abf1405373eacb53d3dc305d28364f2 #next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key @@ -20,7 +20,8 @@ endif JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l) -GLUON_MAKE := ${MAKE} --no-print-directory -C ${GLUON_BUILD_DIR} \ +GLUON_MAKE := ${MAKE} -j ${JOBS} --no-print-directory -C ${GLUON_BUILD_DIR} \ + BROKEN=1 \ GLUON_RELEASE=${GLUON_RELEASE} \ GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \ GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED} @@ -38,7 +39,7 @@ info: build: gluon-prepare for target in ${GLUON_TARGETS}; do \ echo ""Building target $$target""; \ - ${GLUON_MAKE} -j ${JOBS} download all BROKEN=1 GLUON_TARGET="$$target"; \ + ${GLUON_MAKE} download all BROKEN=1 GLUON_TARGET="$$target"; \ done manifest: build diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index e504aa1..8cef785 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -7,7 +7,7 @@ index 063ab1a..51150e4 100644 }) then lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' +elseif platform.match('ipq40xx', 'generic', { -+ 'avm,fritz-box-7530', ++ 'avm,fritzbox-7530', +}) then + lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' elseif platform.match('lantiq', 'xrx200', { diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch index c46416d..3903694 100644 --- a/patches/targets-ipq40xx-devices.patch +++ b/patches/targets-ipq40xx-devices.patch @@ -1,8 +1,8 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index 8420a56..cf0023d 100644 +index 246fe066..1247cac4 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -87,6 +87,15 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -87,6 +87,21 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') @@ -14,6 +14,12 @@ index 8420a56..cf0023d 100644 + factory = false, + broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+) +}) ++ ++-- Meraki ++ ++device('meraki-mr33', 'meraki_mr33', { ++ factory = false, ++}) + -- NETGEAR diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index bc95f40..9dce406 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,28 +1,35 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 4e6e1cff..ba01e29e 100644 +index 7c7fa151..5116551f 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -7,6 +7,25 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { - +@@ -4,9 +4,32 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { + factory = false, + }) + ++device('asus-rt-ax53u', 'asus_rt-ax53u', { ++ factory = false, ++}) ++ + -- Cudy - + +device('cudy-x6', 'cudy_x6', { -+ factory = false, ++ factory = false, +}) + +device('cudy-m1800', 'cudy_m1800', { -+ factory = false, ++ factory = false, +}) + +device('cudy-wr1300-v1', 'cudy_wr1300-v1', { -+ factory = false, ++ factory = false, +}) + +device('cudy-wr1300-v2', 'cudy_wr1300-v2', { -+ factory = false, -+ manifest_aliases = { -+ 'cudy-wr1300-v3', -+ }, ++ factory = false, ++ manifest_aliases = { ++ 'cudy-wr1300-v3', ++ }, +}) + device('cudy-wr2100', 'cudy_wr2100', { From d97e591da59f5af796dd17c830b65346f4e2eeae Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 00:33:32 +0200 Subject: [PATCH 030/129] make update should run -j1 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f4fe39a..33510c4 100644 --- a/Makefile +++ b/Makefile @@ -62,8 +62,8 @@ gluon-prepare: output-clean ${GLUON_BUILD_DIR} && git checkout -q --force ${GLUON_GIT_REF} \ && git clean -fd; ln -sfT .. ${GLUON_BUILD_DIR}/site - make gluon-patch - ${GLUON_MAKE} update + ${MAKE} gluon-patch + ${GLUON_MAKE} -j1 update gluon-patch: echo "Applying Patches ..." From 11249338d7821a15f27d17097bc16bbe59f0dbbe Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 01:16:11 +0200 Subject: [PATCH 031/129] fix missing quotation mark --- i18n/de.po | 2 +- i18n/fr.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/i18n/de.po b/i18n/de.po index f382596..95c59f7 100644 --- a/i18n/de.po +++ b/i18n/de.po @@ -29,7 +29,7 @@ msgstr "" msgid "gluon-config-mode:novpn" msgstr "" "

Du hast dich entschieden, das VPN-Netzwerk nicht zu nutzen. " -"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben.

+"Dein Knoten kann sich nur dann mit dem Freifunk-Netzwerk verbinden, wenn andere Knoten in Reichweite bereits eine Verbindung haben.

" msgid "gluon-config-mode:reboot" msgstr "" diff --git a/i18n/fr.po b/i18n/fr.po index 2e54c40..87a47aa 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -58,4 +58,4 @@ msgstr "" "

Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. " Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. " Ce champ n'est pas nécessaire pour exploiter un nœud. " -Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.

" \ No newline at end of file +Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.

" From 68345e6ff9d21d242990228daafea9acb9a6c65f Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 01:21:30 +0200 Subject: [PATCH 032/129] fix missing quotation mark (fr) --- i18n/fr.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/i18n/fr.po b/i18n/fr.po index 87a47aa..abd20bd 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -56,6 +56,6 @@ msgstr "" msgid "gluon-config-mode:contact-help" msgstr "" "

Veuillez indiquer ici vos coordonnées pour nous permettre de vous contacter. " -Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. " -Ce champ n'est pas nécessaire pour exploiter un nœud. " -Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.

" +"Ces informations ne sont accessibles qu'aux opérateurs du réseau Freifunk local et leur permettent de vous contacter en cas de problème important. " +"Ce champ n'est pas nécessaire pour exploiter un nœud. " +"Vous pouvez supprimer ou modifier vous-même les informations de contact dans ce menu.

" From 342479be90f16ca98cd3bdb3adb6766e3edf1ab0 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 01:26:29 +0200 Subject: [PATCH 033/129] fix rocket 5-ac wifi driver firmware --- patches/targets-ath79-generic.patch | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 0638d68..5450582 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,28 +1,19 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index a5d0e484..55ccf959 100644 +index bcbf4acd..b59ca78b 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -222,6 +222,15 @@ device('netgear-wnr2200-16m', 'netgear_wnr2200-16m', { - factory_ext = '.img', - }) - -+device('netgear-wndr3800', 'netgear_wndr3800', { -+ factory_ext = '.img', -+}) -+ -+device('netgear-wndr3800ch', 'netgear_wndr3800ch', { -+ factory_ext = '.img', -+ aliases = {'netgear-wndr3800chmychart'}, -+}) -+ - - -- OCEDO - -@@ -606,3 +615,7 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') + +device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { -+ packages = ATH10K_PACKAGES_QCA9888, ++ packages = ATH10K_PACKAGES_QCA9880, +}) ++ ++ ++-- Zyxel ++ ++device('zyxel-nbg6616', 'zyxel_nbg6616', { ++ packages = ATH10K_PACKAGES_QCA9880, ++}) \ No newline at end of file From 0a837fb6b518c1a932d7c27af1b1d037699a7bc5 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 15 Apr 2023 01:55:10 +0200 Subject: [PATCH 034/129] fix patch --- patches/targets-ath79-generic.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 5450582..ab1290c 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index bcbf4acd..b59ca78b 100644 +index e9083bea..e1300b89 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic @@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { @@ -16,4 +16,4 @@ index bcbf4acd..b59ca78b 100644 + +device('zyxel-nbg6616', 'zyxel_nbg6616', { + packages = ATH10K_PACKAGES_QCA9880, -+}) \ No newline at end of file ++}) From 12b3f36a3dd48fb81eddc4a8cea12e36070bce55 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 29 Apr 2023 15:44:50 +0200 Subject: [PATCH 035/129] update openwrt --- Makefile | 2 +- patches/config-roles-ui.patch | 810 ---------------------------------- 2 files changed, 1 insertion(+), 811 deletions(-) delete mode 100644 patches/config-roles-ui.patch diff --git a/Makefile b/Makefile index 33510c4..80025dd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := 53dce4944abf1405373eacb53d3dc305d28364f2 #next v2023.1.x +GLUON_GIT_REF := 699bbd2f4473a9deaf8f13f7052dab340d440930 #next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/patches/config-roles-ui.patch b/patches/config-roles-ui.patch deleted file mode 100644 index 497f618..0000000 --- a/patches/config-roles-ui.patch +++ /dev/null @@ -1,810 +0,0 @@ -From f26d0c28df8189192ca1e4108c33362afc5fd81b Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Fri, 15 Apr 2022 00:44:39 +0200 -Subject: [PATCH 01/15] gluon-web-model: add MultiListValue class - ---- - .luacheckrc | 1 + - .../gluon/config-mode/www/static/gluon.css | 2 +- - .../gluon-config-mode-theme/sass/gluon.scss | 7 +++ - .../lib/gluon/web/view/model/mlvalue.html | 23 +++++++ - .../usr/lib/lua/gluon/web/model/classes.lua | 60 +++++++++++++++++++ - 5 files changed, 92 insertions(+), 1 deletion(-) - create mode 100644 package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html - -diff --git a/.luacheckrc b/.luacheckrc -index 2f491ca253..0f17ecc565 100644 ---- a/.luacheckrc -+++ b/.luacheckrc -@@ -50,6 +50,7 @@ files["package/**/check_site.lua"] = { - - files["package/**/luasrc/lib/gluon/config-mode/*"] = { - globals = { -+ "MultiListValue", - "DynamicList", - "Flag", - "Form", -diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -index c84ac01bed..296dc49a39 100644 ---- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -+++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -@@ -1 +1 @@ --html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} -+html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} -diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss -index 575af4f926..3af8d5e000 100644 ---- a/package/gluon-config-mode-theme/sass/gluon.scss -+++ b/package/gluon-config-mode-theme/sass/gluon.scss -@@ -366,6 +366,13 @@ input[type=password] { - min-width: 20em; - } - -+.gluon-multi-list-option-descr { -+ display: inline-block; -+ vertical-align: top; -+ margin-top: 0.35em; -+ margin-left: 0.4em; -+} -+ - .gluon-button { - @include button; - -diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html -new file mode 100644 -index 0000000000..a65eda7449 ---- /dev/null -+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html -@@ -0,0 +1,23 @@ -+<% -+ local br = self.orientation == "horizontal" and '   ' or '
' -+ local entries = self:entries() -+ local util = require 'gluon.util' -+%> -+
-+ <% for i, entry in pairs(entries) do %> -+ > -+ > -+ > -+ <%|entry.value%> -+ -+ <% if i ~= #entries then write(br) end %> -+ <% end %> -+
-diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -index 93279c3b61..64906d6bb5 100644 ---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -@@ -361,6 +361,66 @@ function ListValue:validate() - end - - -+local MultiListValue = class(AbstractValue) -+M.MultiListValue = MultiListValue -+ -+function MultiListValue:__init__(...) -+ AbstractValue.__init__(self, ...) -+ self.subtemplate = "model/mlvalue" -+ -+ self.size = 1 -+ -+ self.keys = {} -+ self.entry_list = {} -+end -+ -+function MultiListValue:value(key, val, ...) -+ key = tostring(key) -+ -+ if self.keys[key] then -+ return -+ end -+ self.keys[key] = true -+ -+ val = val or key -+ table.insert(self.entry_list, { -+ key = key, -+ value = tostring(val), -+ deps = {...}, -+ }) -+end -+ -+function MultiListValue:entries() -+ local ret = {unpack(self.entry_list)} -+ -+ return ret -+end -+ -+function MultiListValue:validate() -+ for _, val in ipairs(self.data) do -+ if not self.keys[val] then -+ return false -+ end -+ end -+ -+ return true -+end -+ -+function MultiListValue:defaultvalue() -+ local value = self.default -+ -+ if type(value) == "table" then -+ return value -+ else -+ return { value } -+ end -+end -+ -+function MultiListValue:formvalue(http) -+ return http:formvaluetable(self:id()) -+end -+ -+ - local DynamicList = class(AbstractValue) - M.DynamicList = DynamicList - - -From be8462048915941f20f58e16f4391b54c49cc5d6 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Fri, 15 Apr 2022 02:02:44 +0200 -Subject: [PATCH 02/15] gluon-web-network: initial draft of role configuration - ---- - .../gluon/config-mode/model/admin/network.lua | 45 +++++++------------ - 1 file changed, 16 insertions(+), 29 deletions(-) - -diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -index df92c96590..33bf44ae20 100644 ---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -@@ -9,13 +9,12 @@ http://www.apache.org/licenses/LICENSE-2.0 - ]]-- - - local uci = require("simple-uci").cursor() --local sysconfig = require 'gluon.sysconfig' --local util = require 'gluon.util' - - local wan = uci:get_all("network", "wan") - local wan6 = uci:get_all("network", "wan6") - local dns_static = uci:get_first("gluon-wan-dnsmasq", "static") - -+ - local f = Form(translate("WAN connection")) - - local s = f:section(Section) -@@ -76,36 +75,23 @@ end - - s = f:section(Section) - --local wired_mesh_help = { -- single = translate('Enable meshing on the Ethernet interface'), -- wan = translate('Enable meshing on the WAN interface'), -- lan = translate('Enable meshing on the LAN interface'), --} -- --local function wired_mesh(iface) -- if not sysconfig[iface .. '_ifname'] then return end -- local iface_roles = uci:get_list('gluon', 'iface_' .. iface, 'role') -- -- local option = s:option(Flag, 'mesh_' .. iface, wired_mesh_help[iface]) -- option.default = util.contains(iface_roles, 'mesh') ~= false -- -- function option:write(data) -- local roles = uci:get_list('gluon', 'iface_' .. iface, 'role') -- if data then -- util.add_to_set(roles, 'mesh') -- else -- util.remove_from_set(roles, 'mesh') -- end -- uci:set_list('gluon', 'iface_' .. iface, 'role', roles) -+uci:foreach('gluon', 'interface', function(config) -+ local section_name = config['.name'] -+ local ifaces = s:option(MultiListValue, section_name, config.name) -+ -+ ifaces.widget = 'radio' -+ ifaces.orientation = 'horizontal' -+ ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive. -+ ifaces:value('mesh', 'Mesh') -+ ifaces:value('client', 'Client') -+ -+ ifaces.default = config.role - -- -- Reconfigure on next reboot -- uci:set('gluon', 'core', 'reconfigure', true) -+ function ifaces:write(data) -+ uci:set_list("gluon", section_name, "role", data) - end --end -+end) - --wired_mesh('single') --wired_mesh('wan') --wired_mesh('lan') - - local section - uci:foreach("system", "gpio_switch", function(si) -@@ -166,4 +152,5 @@ function f:write() - uci:commit('system') - end - -+ - return f - -From 76e239665152d9584ebb8c1b109815a52e98669f Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 30 Oct 2022 14:15:34 +0100 -Subject: [PATCH 03/15] gluon-web-network: show pretty interface names - ---- - .../lib/gluon/config-mode/model/admin/network.lua | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -index 33bf44ae20..cf1d323757 100644 ---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -@@ -75,13 +75,19 @@ end - - s = f:section(Section) - -+local pretty_ifnames = { -+ ["/wan"] = translate("WAN-Interfaces"), -+ ["/single"] = translate("Interface"), -+ ["/lan"] = translate("LAN-Interfaces") -+} -+ - uci:foreach('gluon', 'interface', function(config) - local section_name = config['.name'] -- local ifaces = s:option(MultiListValue, section_name, config.name) -+ local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name) - - ifaces.widget = 'radio' - ifaces.orientation = 'horizontal' -- ifaces:value('uplink', 'Uplink') -- TODO: Uplink and Client should be mutually exclusive. -+ ifaces:value('uplink', 'Uplink') - ifaces:value('mesh', 'Mesh') - ifaces:value('client', 'Client') - - -From 98db33babc5edc50fb273bc8d232f42ce34ce0ca Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Wed, 4 Jan 2023 22:12:56 +0100 -Subject: [PATCH 04/15] gluon-web-model: uglify flag --support-ie8 is now --ie - -From uglify 3.14.0 on, this command is called --ie: - -https://github.com/mishoo/UglifyJS/commit/ef5f7fc25e93833396540cf7479685b241bd1b8f ---- - package/gluon-web-model/javascript/gluon-web-model.js | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js -index ec9cdc4af3..9e8a11b9d2 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.js -@@ -13,7 +13,7 @@ - /* - Build using: - -- uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --support-ie8 -+ uglifyjs javascript/gluon-web-model.js -o javascript/gluon-web-model.min.js -c -m --ie - */ - - - -From f489885f0cbf2b94c260f1193eb4d36eec6d4198 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Fri, 6 May 2022 04:15:41 +0200 -Subject: [PATCH 05/15] gluon-web-model: add exclusive options for - MultiListValue - ---- - .../gluon/config-mode/www/static/gluon.css | 2 +- - .../gluon-config-mode-theme/sass/gluon.scss | 4 ++++ - .../lib/gluon/web/view/model/mlvalue.html | 4 +++- - .../javascript/gluon-web-model.js | 15 ++++++++++++ - .../javascript/gluon-web-model.min.js | 2 +- - .../usr/lib/lua/gluon/web/model/classes.lua | 24 +++++++++++++++++++ - 6 files changed, 48 insertions(+), 3 deletions(-) - -diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -index 296dc49a39..d239fd8f1e 100644 ---- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -+++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/www/static/gluon.css -@@ -1 +1 @@ --html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} -+html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}#maincontent ul{margin-left:2em}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar .hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar .hostinfo a:link,#menubar .hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar .hostinfo a:link:hover,#menubar .hostinfo a:link:focus,#menubar .hostinfo a:visited:hover,#menubar .hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em}.gluon-section h3{text-decoration:none;font-weight:bold;color:#555555;margin:0.25em;font-size:100%}.gluon-section-descr,.gluon-warning{margin-bottom:2em}.gluon-osm-map{width:100%;height:40em;margin-bottom:1em}input::placeholder{color:#aaaaaa}input::-webkit-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label::after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=checkbox][disabled]+label{background-color:#dcdcdc !important}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label::after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px;box-sizing:content-box;outline:0}.select-wrapper{position:relative;display:inline-block}.select-wrapper::before{position:absolute;z-index:1;right:0.05em;top:calc(2px + 0.1em);bottom:calc(2px + 0.1em);width:1.4em;border-left:0.05em solid rgba(0,0,0,0.25);pointer-events:none;background:url('data:image/svg+xml;utf8,') center/0.8em 0.5em no-repeat;content:''}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}option{color:#003247;background:#ffe199}select,input[type=text],input[type=password]{min-width:20em}.gluon-multi-list-option-descr{display:inline-block;vertical-align:top;margin-top:0.35em;margin-left:0.4em}.gluon-button{display:inline-block;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);background-color:#E6E6E6;border:none;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}.gluon-button::-moz-focus-inner{padding:0;border:0}.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}.gluon-button:focus{outline:0}.gluon-button:hover,.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}.gluon-button-reset{background-color:#e30;color:#fff}.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-button-submit:active{background:grey}.gluon-input-invalid{background:#e30 !important;color:white}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}.gluon-value-field{flex:3;position:relative}.gluon-value-field input,.gluon-value-field select,.gluon-value-field input+label{position:relative}.gluon-value-field-text{flex:3;padding-top:0.39em}.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}.gluon-value-field-long input,.gluon-value-field-long select,.gluon-value-field-long input+label{position:relative}.gluon-value-field-long-after{flex:2}.gluon-value-description{font-size:8pt}.gluon-form-descr{margin-bottom:1em}.gluon-form-descr:empty,.gluon-section-descr:empty,.gluon-warning:empty{display:none}.gluon-form-descr,.gluon-section-descr,.gluon-warning,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}.gluon-section-node{clear:both;position:relative;border:none}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-add::after,.gluon-remove::after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add::after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove::after{content:'–'}.gluon-warning{background:#ffe9b3}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em} -diff --git a/package/gluon-config-mode-theme/sass/gluon.scss b/package/gluon-config-mode-theme/sass/gluon.scss -index 3af8d5e000..a63156e430 100644 ---- a/package/gluon-config-mode-theme/sass/gluon.scss -+++ b/package/gluon-config-mode-theme/sass/gluon.scss -@@ -273,6 +273,10 @@ input[type=checkbox] { - text-align: center; - font-size: 1.7em; - } -+ -+ &[disabled] + label { -+ background-color: #dcdcdc !important; -+ } - } - - input[type=radio] { -diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html -index a65eda7449..0a4fb5c9db 100644 ---- a/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html -+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/mlvalue.html -@@ -13,7 +13,9 @@ - attr("id", id.."."..entry.key) .. - attr("name", id) .. - attr("value", entry.key) .. -- attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") -+ attr("checked", (util.contains(self:cfgvalue(), entry.key)) and "checked") .. -+ attr("data-exclusive-with", self.exclusions[entry.key]) .. -+ attr("data-update", "change") - %>> - > - <%|entry.value%> -diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js -index 9e8a11b9d2..ce8ad6478a 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.js -@@ -219,6 +219,20 @@ - parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : ''; - } - -+ var nodes = document.querySelectorAll('[data-exclusive-with]'); -+ for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { -+ var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with')); -+ -+ node.disabled = false; -+ for (let list_item of excusive_with) { -+ var el = document.getElementById(node.name + '.' + list_item); -+ node.disabled |= el.checked; -+ } -+ -+ if (node.disabled) -+ node.checked = false; -+ } -+ - if (state) { - update(); - } -@@ -533,6 +547,7 @@ - init_dynlist(node, attr); - } - -+ - update(); - })(); - })(); -diff --git a/package/gluon-web-model/javascript/gluon-web-model.min.js b/package/gluon-web-model/javascript/gluon-web-model.min.js -index 07478cbb02..2adf363f08 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.min.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.min.js -@@ -1 +1 @@ --!function(){var v={};function a(e){return/^-?\d+$/.test(e)?+e:NaN}function r(e){return/^-?\d*\.?\d+?$/.test(e)?+e:NaN}var u={integer:function(){return!isNaN(a(this))},uinteger:function(){return 0<=a(this)},float:function(){return!isNaN(r(this))},ufloat:function(){return 0<=r(this)},ipaddr:function(){return u.ip4addr.apply(this)||u.ip6addr.apply(this)},ip4addr:function(){var e;return!!(e=this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))&&(0<=e[1]&&e[1]<=255&&0<=e[2]&&e[2]<=255&&0<=e[3]&&e[3]<=255&&0<=e[4]&&e[4]<=255)},ip6addr:function(){return this.indexOf("::")<0?null!=this.match(/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i):!(0<=this.indexOf(":::")||this.match(/::.+::/)||this.match(/^:[^:]/)||this.match(/[^:]:$/))&&(!!this.match(/^(?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}$/i)||(!!this.match(/^(?:[a-f0-9]{1,4}:){7}:$/i)||!!this.match(/^:(?::[a-f0-9]{1,4}){7}$/i)))},wpakey:function(){var e=this;return 64==e.length?null!=e.match(/^[a-f0-9]{64}$/i):8<=e.length&&e.length<=63},range:function(e,t){var n=r(this);return+e<=n&&n<=+t},min:function(e){return r(this)>=+e},max:function(e){return r(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function o(e){for(var t=0;tn.index);i=i.nextSibling);i?r.insertBefore(n.node,i):r.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),e=!0}r&&r.parentNode&&r.getAttribute("data-optionals")&&(r.parentNode.style.display=r.options.length<=1?"none":"")}e&&h()}function g(e,t,n,a){return e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)}),e}function m(l,s){var c=s.prefix;function o(e,t,n){for(var a=[];l.firstChild;){var r=l.firstChild;(i=+r.index)!=n&&("input"==r.nodeName.toLowerCase()?a.push(r.value||""):"select"==r.nodeName.toLowerCase()&&(a[a.length-1]=r.options[r.selectedIndex].value)),l.removeChild(r)}0<=t?(e=t+1,a.splice(t,0,"")):s.optional||0!=a.length||a.push("");for(var i=1;i<=a.length;i++){var o=document.createElement("input");if(o.id=c+"."+i,o.name=c,o.value=a[i-1],o.type="text",o.index=i,s.size&&(o.size=s.size),s.placeholder&&(o.placeholder=s.placeholder),l.appendChild(o),s.type&&y(o,!1,s.type),g(o,"keydown",f),g(o,"keypress",p),i==e)o.focus();else if(-i==e){o.focus();var d=o.value;o.value=" ",o.value=d}if(s.optional||1=+e},max:function(e){return i(this)<=+e},irange:function(e,t){var n=a(this);return+e<=n&&n<=+t},imin:function(e){return a(this)>=+e},imax:function(e){return a(this)<=+e},minlength:function(e){return+e<=(""+this).length},maxlength:function(e){return(""+this).length<=+e}};function p(e){for(var t,n,a,i=0;in.index);r=r.nextSibling);r?i.insertBefore(n.node,r):i.appendChild(n.node),n.node.dispatchEvent(new Event("gluon-show")),t=!0}i&&i.parentNode&&i.getAttribute("data-optionals")&&(i.parentNode.style.display=i.options.length<=1?"none":"")}for(var d=document.querySelectorAll("[data-exclusive-with]"),o=0;(a=d[o])!==undefined;o++){var u,l=JSON.parse(a.getAttribute("data-exclusive-with"));a.disabled=!1;for(u of l){var c=document.getElementById(a.name+"."+u);a.disabled|=c.checked}a.disabled&&(a.checked=!1)}t&&f()}function v(e,t,n,a){e.addEventListener?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,function(){var e=window.event;return!e.target&&e.srcElement&&(e.target=e.srcElement),!!n(e)})}function m(t,n,e){var a,i,r=(i=(e=e).match(/^([^\(]+)\(([^,]+),([^\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2],i[3]])}:(i=e.match(/^([^\(]+)\(([^,\)]+)\)$/))&&(a=d[i[1]])!==undefined?function(){return a.apply(this,[i[2]])}:d[e];r&&(v(t,"blur",e=function(){var e;t.form&&(t.className=t.className.replace(/ gluon-input-invalid/g,""),0==(e=(t.options&&-1 -Date: Fri, 6 May 2022 04:16:05 +0200 -Subject: [PATCH 06/15] gluon-web-network: make roles "uplink" / "mesh" and - "client" exclusive - ---- - .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -index cf1d323757..73bf555fea 100644 ---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -@@ -90,6 +90,8 @@ uci:foreach('gluon', 'interface', function(config) - ifaces:value('uplink', 'Uplink') - ifaces:value('mesh', 'Mesh') - ifaces:value('client', 'Client') -+ ifaces:exclusive('uplink', 'client') -+ ifaces:exclusive('mesh', 'client') - - ifaces.default = config.role - - -From 4c2027943b08e08e45eb92303a836d0dbf2cdebb Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Fri, 16 Dec 2022 00:29:29 +0100 -Subject: [PATCH 07/15] gluon-core: fix invalid role configurations during - reconfigure - ---- - .../luasrc/lib/gluon/upgrade/021-interface-roles | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles -index 5d27fb708b..6e39219a69 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/021-interface-roles -@@ -63,4 +63,19 @@ for iface in pairs(interfaces) do - end - end - -+-- Fix invalid role configurations -+ -+uci:foreach('gluon', 'interface', function(interface) -+ -+ local function has_role(role) -+ return util.contains(interface.role, role) -+ end -+ -+ if has_role('client') and (has_role('mesh') or has_role('uplink')) then -+ -- remove 'client' role -+ util.remove_from_set(interface.role, 'client') -+ uci:set('gluon', interface['.name'], 'role', interface.role) -+ end -+end) -+ - uci:save('gluon') - -From c00bf47077384b9cd08eef5693b12668bedaf1cd Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Fri, 16 Dec 2022 00:44:48 +0100 -Subject: [PATCH 08/15] docs: explain that invalid interface roles are removed - ---- - docs/user/site.rst | 9 ++------- - 1 file changed, 2 insertions(+), 7 deletions(-) - -diff --git a/docs/user/site.rst b/docs/user/site.rst -index fc82f314d2..96bb5eacff 100644 ---- a/docs/user/site.rst -+++ b/docs/user/site.rst -@@ -448,13 +448,8 @@ interfaces \: optional - The ``client`` role requires exclusive control over an interface. When - the ``client`` role is assigned to an interface at the same time as other - roles (like ``'client', 'mesh'`` in the above example), the other roles take -- precedence (enabling ``mesh``, but not ``client`` in the example). -- -- Such a default configuration still fulfills a purpose (and is in fact the -- recommended way to enable "Mesh-on-LAN" by default): The "LAN interface -- meshing" checkbox in the advanced network settings will only add or remove -- the ``mesh`` role, so the ``client`` role must already be in the configuration -- to make the LAN port a regular client interface when the checkbox is disabled. -+ precedence (enabling ``mesh``, but not ``client`` in the example). In that -+ case, the ``client`` role is removed from the config of the interface. - - All interface settings are optional. If unset, the following defaults are - used: - -From e44e0bca94fafd508d4f65ca632950fb3e1d303c Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:49:08 +0100 -Subject: [PATCH 09/15] fixup! gluon-web-network: initial draft of role - configuration - ---- - .../luasrc/lib/gluon/config-mode/model/admin/network.lua | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -index 73bf555fea..1a50147b86 100644 ---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -@@ -85,7 +85,6 @@ uci:foreach('gluon', 'interface', function(config) - local section_name = config['.name'] - local ifaces = s:option(MultiListValue, section_name, pretty_ifnames[config.name] or config.name) - -- ifaces.widget = 'radio' - ifaces.orientation = 'horizontal' - ifaces:value('uplink', 'Uplink') - ifaces:value('mesh', 'Mesh') - -From a9ab6815f7a679bfa637b821c1f8b46a3de8fe05 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:53:28 +0100 -Subject: [PATCH 10/15] fixup! gluon-web-model: add exclusive options for - MultiListValue - ---- - package/gluon-web-model/javascript/gluon-web-model.js | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js -index ce8ad6478a..4c9dd72e19 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.js -@@ -547,7 +547,6 @@ - init_dynlist(node, attr); - } - -- - update(); - })(); - })(); - -From 63d99fad284da8807af2730e0859e4332d276ee5 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:53:36 +0100 -Subject: [PATCH 11/15] fixup! gluon-web-model: add exclusive options for - MultiListValue - ---- - package/gluon-web-model/javascript/gluon-web-model.js | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js -index 4c9dd72e19..7b98dc1ef3 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.js -@@ -224,7 +224,7 @@ - var excusive_with = JSON.parse(node.getAttribute('data-exclusive-with')); - - node.disabled = false; -- for (let list_item of excusive_with) { -+ for (var list_item of excusive_with) { - var el = document.getElementById(node.name + '.' + list_item); - node.disabled |= el.checked; - } - -From af3b1ce4736c9df58c33da84137cafdf8daf2e3d Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:24:10 +0100 -Subject: [PATCH 12/15] gluon-core: make interface roles exclusive in site - config - ---- - .luacheckrc | 1 + - package/gluon-core/check_site.lua | 6 +++++- - .../luasrc/lib/gluon/check-site.lua | 21 +++++++++++++++++++ - 3 files changed, 27 insertions(+), 1 deletion(-) - -diff --git a/.luacheckrc b/.luacheckrc -index 0f17ecc565..9639097284 100644 ---- a/.luacheckrc -+++ b/.luacheckrc -@@ -29,6 +29,7 @@ files["package/**/check_site.lua"] = { - "need", - "need_alphanumeric_key", - "need_array", -+ "need_array_elements_exclusive", - "need_array_of", - "need_boolean", - "need_chanlist", -diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua -index 06b9ac59d0..9918984ecc 100644 ---- a/package/gluon-core/check_site.lua -+++ b/package/gluon-core/check_site.lua -@@ -77,7 +77,11 @@ need_boolean(in_domain({'mesh', 'vxlan'}), false) - - local interfaces_roles = {'client', 'uplink', 'mesh'} - for _, config in ipairs({'wan', 'lan', 'single'}) do -- need_array_of(in_site({'interfaces', config, 'default_roles'}), interfaces_roles, false) -+ local default_roles = in_site({'interfaces', config, 'default_roles'}) -+ -+ need_array_of(default_roles, interfaces_roles, false) -+ need_array_elements_exclusive(default_roles, "client", "mesh", false) -+ need_array_elements_exclusive(default_roles, "client", "uplink", false) - end - - obsolete({'mesh_on_wan'}, 'Use interfaces.wan.default_roles.') -diff --git a/package/gluon-core/luasrc/lib/gluon/check-site.lua b/package/gluon-core/luasrc/lib/gluon/check-site.lua -index 148f4968f7..2172a984c7 100644 ---- a/package/gluon-core/luasrc/lib/gluon/check-site.lua -+++ b/package/gluon-core/luasrc/lib/gluon/check-site.lua -@@ -55,6 +55,14 @@ local function merge(a, b) - return m - end - -+local function contains(table, val) -+ for i=1,#table do -+ if table[i] == val then -+ return true -+ end -+ end -+ return false -+end - - local function path_to_string(path) - if path.is_value then -@@ -370,6 +378,19 @@ function M.need_array_of(path, array, required) - return M.need_array(path, function(e) M.need_one_of(e, array) end, required) - end - -+function M.need_array_elements_exclusive(path, a, b, required) -+ local val = need_type(path, 'table', required, 'be an array') -+ if not val then -+ return nil -+ end -+ -+ if contains(val, a) and contains(val, b) then -+ config_error(conf_src(path), 'expected %s to contain either "%s" or "%s", but not both.', path_to_string(path), a, b) -+ end -+ -+ return val -+end -+ - function M.need_chanlist(path, channels, required) - local valid_chanlist = check_chanlist(channels) - return M.need(path, valid_chanlist, required, - -From 77075b29fc8107938759e78485fb27cfc2aa689c Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:55:21 +0100 -Subject: [PATCH 13/15] fixup! gluon-web-model: add MultiListValue class - ---- - .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 8 +------- - 1 file changed, 1 insertion(+), 7 deletions(-) - -diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -index 31b46476f1..74a4181b87 100644 ---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -@@ -431,13 +431,7 @@ function MultiListValue:exclusive(a, b) - end - - function MultiListValue:defaultvalue() -- local value = self.default -- -- if type(value) == "table" then -- return value -- else -- return { value } -- end -+ return self.default or {} - end - - function MultiListValue:formvalue(http) - -From 544266af9a22bfe7af2cea9bb9cbdd4220964f22 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:43:17 +0100 -Subject: [PATCH 14/15] gluon-web-model: migrate to SPDX headers for licensing - ---- - .../gluon-web-model/javascript/gluon-web-model.js | 14 +++++--------- - .../luasrc/usr/lib/lua/gluon/web/model/classes.lua | 7 ++++--- - .../usr/lib/lua/gluon/web/model/datatypes.lua | 6 +++--- - 3 files changed, 12 insertions(+), 15 deletions(-) - -diff --git a/package/gluon-web-model/javascript/gluon-web-model.js b/package/gluon-web-model/javascript/gluon-web-model.js -index 7b98dc1ef3..55c68e2e87 100644 ---- a/package/gluon-web-model/javascript/gluon-web-model.js -+++ b/package/gluon-web-model/javascript/gluon-web-model.js -@@ -1,13 +1,9 @@ - /* -- Copyright 2008 Steven Barth -- Copyright 2008-2012 Jo-Philipp Wich -- Copyright 2017 Matthias Schiffer -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -+ SPDX-License-Identifier: Apache-2.0 -+ SPDX-FileCopyrightText: 2008, Steven Barth -+ SPDX-FileCopyrightText: 2008-2012, Jo-Philipp Wich -+ SPDX-FileCopyrightText: 2017, Matthias Schiffer -+ SPDX-FileCopyrightText: 2023, Leonardo Mörlein - */ - - /* -diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -index 74a4181b87..1b2e5f5c2b 100644 ---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua -@@ -1,6 +1,7 @@ ---- Copyright 2008 Steven Barth ---- Copyright 2017-2018 Matthias Schiffer ---- Licensed to the public under the Apache License 2.0. -+-- SPDX-License-Identifier: Apache-2.0 -+-- SPDX-FileCopyrightText: 2008, Steven Barth -+-- SPDX-FileCopyrightText: 2017-2018, Matthias Schiffer -+-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein - - local util = require "gluon.web.util" - local gluon_util = require "gluon.util" -diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua -index fdee7d7dbe..31c1aa82fc 100644 ---- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua -+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/datatypes.lua -@@ -1,6 +1,6 @@ ---- Copyright 2010 Jo-Philipp Wich ---- Copyright 2017 Matthias Schiffer ---- Licensed to the public under the Apache License 2.0. -+-- SPDX-License-Identifier: Apache-2.0 -+-- SPDX-FileCopyrightText: 2010, Jo-Philipp Wich -+-- SPDX-FileCopyrightText: 2017, Matthias Schiffer - - local M = {} - - -From 88c976a7f3afa576fce5388ea98a10bc853e51b4 Mon Sep 17 00:00:00 2001 -From: lemoer -Date: Sun, 26 Feb 2023 22:46:23 +0100 -Subject: [PATCH 15/15] gluon-web-network: migrate to SPDX headers for - licensing - ---- - .../lib/gluon/config-mode/model/admin/network.lua | 12 +++--------- - 1 file changed, 3 insertions(+), 9 deletions(-) - -diff --git a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -index 1a50147b86..1c0b34721b 100644 ---- a/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -+++ b/package/gluon-web-network/luasrc/lib/gluon/config-mode/model/admin/network.lua -@@ -1,12 +1,6 @@ ----[[ --Copyright 2014 Nils Schneider -- --Licensed under the Apache License, Version 2.0 (the "License"); --you may not use this file except in compliance with the License. --You may obtain a copy of the License at -- --http://www.apache.org/licenses/LICENSE-2.0 --]]-- -+-- SPDX-License-Identifier: Apache-2.0 -+-- SPDX-FileCopyrightText: 2014, Nils Schneider -+-- SPDX-FileCopyrightText: 2023, Leonardo Mörlein - - local uci = require("simple-uci").cursor() - From e1697b48151ecfba0f1d290e7ce06b152b701316 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 6 May 2023 16:18:15 +0200 Subject: [PATCH 036/129] update v2023 --- Makefile | 4 +- contrib/genpkglist.py | 1 + modules | 2 +- patches/020-interfaces.patch | 19 +- patches/batman-v-radv-filterd.patch | 255 ------------------ patches/batman-v-respondd-ptq1.patch | 130 --------- patches/batman-v-respondd-statistics.patch | 38 --- patches/batman-v-show-tp-on-status-page.patch | 123 --------- patches/batman-v-wired-tpo.patch | 12 - site.conf | 77 +++++- site.mk | 10 +- 11 files changed, 82 insertions(+), 589 deletions(-) delete mode 100644 patches/batman-v-radv-filterd.patch delete mode 100644 patches/batman-v-respondd-ptq1.patch delete mode 100644 patches/batman-v-respondd-statistics.patch delete mode 100644 patches/batman-v-show-tp-on-status-page.patch delete mode 100644 patches/batman-v-wired-tpo.patch diff --git a/Makefile b/Makefile index 80025dd..54e9157 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := 699bbd2f4473a9deaf8f13f7052dab340d440930 #next v2023.1.x +GLUON_GIT_REF := next v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key @@ -39,7 +39,7 @@ info: build: gluon-prepare for target in ${GLUON_TARGETS}; do \ echo ""Building target $$target""; \ - ${GLUON_MAKE} download all BROKEN=1 GLUON_TARGET="$$target"; \ + ${GLUON_MAKE} download all GLUON_TARGET="$$target"; \ done manifest: build diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index d33f52b..07dc00f 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -295,6 +295,7 @@ def render(self): add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_PCI). \ add_pkglist(PKGS_PCI_NET). \ + add_pkglist(PKGS_VIRT). \ add_pkglist(PKGS_TLS) targets.get('x86-64').add_pkglist(PKGS_VIRT) diff --git a/modules b/modules index 70e07e3..af525fe 100644 --- a/modules +++ b/modules @@ -1,7 +1,7 @@ GLUON_SITE_FEEDS="ffac eulenfunk ffho" PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git -PACKAGES_FFAC_COMMIT=fb9dd6ae7eb80c8ad8d88b3088dd592569cf8860 +PACKAGES_FFAC_COMMIT=660d294e89ca92f5d7302d60de0bc37957b85932 PACKAGES_FFAC_BRANCH=main PACKAGES_EULENFUNK_REPO=https://github.com/ffac/eulenfunk-packages.git diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index 8cef785..f0c92b9 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -1,15 +1,16 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 063ab1a..51150e4 100644 +index 063ab1a1..9f847082 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -67,6 +67,10 @@ elseif platform.match('ramips', 'mt7621', { - 'netgear,wac104', +@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', { + 'arcadyan,vgv7510kw22-nor', }) then - lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' -+elseif platform.match('ipq40xx', 'generic', { -+ 'avm,fritzbox-7530', + lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' ++elseif platform.match('lantiq', 'xrx200', { ++ 'tplink,tdw8970', ++ 'tplink,tdw8980', +}) then -+ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' - elseif platform.match('lantiq', 'xrx200', { - 'arcadyan,vgv7510kw22-nor', ++ lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan4' + elseif platform.match('realtek', 'rtl838x', { + 'd-link,dgs-1210-10p', }) then diff --git a/patches/batman-v-radv-filterd.patch b/patches/batman-v-radv-filterd.patch deleted file mode 100644 index 01d9cb9..0000000 --- a/patches/batman-v-radv-filterd.patch +++ /dev/null @@ -1,255 +0,0 @@ -diff --git a/package/gluon-radv-filterd/src/gluon-radv-filterd.c b/package/gluon-radv-filterd/src/gluon-radv-filterd.c -index b1620cae..ab79de26 100644 ---- a/package/gluon-radv-filterd/src/gluon-radv-filterd.c -+++ b/package/gluon-radv-filterd/src/gluon-radv-filterd.c -@@ -59,11 +59,11 @@ - - #include "mac.h" - --// Recheck TQs after this time even if no RA was received -+// Recheck THROUGHPUTs after this time even if no RA was received - #define MAX_INTERVAL 60 - --// Recheck TQs at most this often, even if new RAs were received (they won't --// become the preferred routers until the TQs have been rechecked) -+// Recheck THROUGHPUTs at most this often, even if new RAs were received (they won't -+// become the preferred routers until the THROUGHPUTs have been rechecked) - // Also, the first update will take at least this long - #define MIN_INTERVAL 15 - -@@ -74,8 +74,8 @@ - // max execution time of a single ebtables call in nanoseconds - #define EBTABLES_TIMEOUT 500000000 // 500ms - --// TQ value assigned to local routers --#define LOCAL_TQ 512 -+// THROUGHPUT value assigned to local routers -+#define LOCAL_THROUGHPUT 10000000 - - #define BUFSIZE 1500 - -@@ -108,7 +108,7 @@ struct router { - struct ether_addr src; - struct timespec eol; - struct ether_addr originator; -- uint16_t tq; -+ uint32_t throughput; - }; - - static struct global { -@@ -116,8 +116,8 @@ static struct global { - struct router *routers; - const char *mesh_iface; - const char *chain; -- uint16_t max_tq; -- uint16_t hysteresis_thresh; -+ uint32_t max_throughput; -+ uint32_t hysteresis_thresh; - struct router *best_router; - volatile sig_atomic_t stop_daemon; - } G = { -@@ -188,8 +188,8 @@ static void usage(const char *msg) { - fprintf(stderr, - "Usage: %s [-m ] [-t ] -c -i \n\n" - " -m B.A.T.M.A.N. advanced mesh interface used to get metric\n" -- " information (\"TQ\") for the available gateways. Default: bat0\n" -- " -t Minimum TQ difference required to switch the gateway.\n" -+ " information (\"THROUGHPUT\") for the available gateways. Default: bat0\n" -+ " -t Minimum THROUGHPUT difference required to switch the gateway.\n" - " Default: 0\n" - " -c ebtables chain that should be managed by the daemon. The\n" - " chain already has to exist on program invocation and should\n" -@@ -289,9 +289,9 @@ static void parse_cmdline(int argc, char *argv[]) { - threshold = strtoul(optarg, &endptr, 10); - if (*endptr != '\0') - exit_errmsg("Threshold must be a number: %s", optarg); -- if (threshold >= LOCAL_TQ) -- exit_errmsg("Threshold too large: %ld (max is %d)", threshold, LOCAL_TQ); -- G.hysteresis_thresh = (uint16_t) threshold; -+ if (threshold >= LOCAL_THROUGHPUT) -+ exit_errmsg("Threshold too large: %ld (max is %d)", threshold, LOCAL_THROUGHPUT); -+ G.hysteresis_thresh = (uint32_t) threshold; - break; - case 'h': - usage(NULL); -@@ -462,7 +462,7 @@ static int parse_originator(struct nl_msg *msg, - - static const enum batadv_nl_attrs mandatory[] = { - BATADV_ATTR_ORIG_ADDRESS, -- BATADV_ATTR_TQ, -+ BATADV_ATTR_THROUGHPUT, - }; - struct nlattr *attrs[BATADV_ATTR_MAX + 1]; - struct nlmsghdr *nlh = nlmsg_hdr(msg); -@@ -470,7 +470,7 @@ static int parse_originator(struct nl_msg *msg, - struct genlmsghdr *ghdr; - struct router *router; - uint8_t *orig; -- uint8_t tq; -+ uint32_t throughput; - - // parse netlink entry - if (!genlmsg_valid_hdr(nlh, 0)) -@@ -490,7 +490,7 @@ static int parse_originator(struct nl_msg *msg, - return NL_OK; - - orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]); -- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]); -+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]); - - if (!attrs[BATADV_ATTR_FLAG_BEST]) - return NL_OK; -@@ -502,11 +502,11 @@ static int parse_originator(struct nl_msg *msg, - if (!router) - return NL_OK; - -- DEBUG_MSG("Found TQ for router " F_MAC " (originator " F_MAC "), it's %d", -- F_MAC_VAR(router->src), F_MAC_VAR(router->originator), tq); -- router->tq = tq; -- if (router->tq > G.max_tq) -- G.max_tq = router->tq; -+ DEBUG_MSG("Found THROUGHPUT for router " F_MAC " (originator " F_MAC "), it's %d", -+ F_MAC_VAR(router->src), F_MAC_VAR(router->originator), throughput); -+ router->throughput = throughput; -+ if (router->throughput > G.max_throughput) -+ G.max_throughput = router->throughput; - - return NL_OK; - } -@@ -549,25 +549,25 @@ static int parse_tt_local(struct nl_msg *msg, - if (!router) - return NL_OK; - -- DEBUG_MSG("Found router " F_MAC " in transtable_local, assigning TQ %d", -- F_MAC_VAR(router->src), LOCAL_TQ); -- router->tq = LOCAL_TQ; -- if (router->tq > G.max_tq) -- G.max_tq = router->tq; -+ DEBUG_MSG("Found router " F_MAC " in transtable_local, assigning THROUGHPUT %d", -+ F_MAC_VAR(router->src), LOCAL_THROUGHPUT); -+ router->throughput = LOCAL_THROUGHPUT; -+ if (router->throughput > G.max_throughput) -+ G.max_throughput = router->throughput; - - return NL_OK; - } - --static void update_tqs(void) { -+static void update_throughputs(void) { - static const struct ether_addr unspec = {}; - struct router *router; - bool update_originators = false; - struct batadv_nlquery_opts opts; - int ret; - -- // reset TQs -+ // reset THROUGHPUTs - foreach(router, G.routers) { -- router->tq = 0; -+ router->throughput = 0; - if (ether_addr_equal(router->originator, unspec)) - update_originators = true; - } -@@ -582,8 +582,8 @@ static void update_tqs(void) { - fprintf(stderr, "Parsing of global translation table failed\n"); - } - -- // look up TQs of originators -- G.max_tq = 0; -+ // look up THROUGHPUTs of originators -+ G.max_throughput = 0; - opts.err = 0; - ret = batadv_genl_query(G.mesh_iface, - BATADV_CMD_GET_ORIGINATORS, -@@ -591,9 +591,9 @@ static void update_tqs(void) { - if (ret < 0) - fprintf(stderr, "Parsing of originators failed\n"); - -- // if all routers have a TQ value, we don't need to check translocal -+ // if all routers have a THROUGHPUT value, we don't need to check translocal - foreach(router, G.routers) { -- if (router->tq == 0) -+ if (router->throughput == 0) - break; - } - if (router != NULL) { -@@ -606,14 +606,14 @@ static void update_tqs(void) { - } - - foreach(router, G.routers) { -- if (router->tq == 0) { -+ if (router->throughput == 0) { - if (ether_addr_equal(router->originator, unspec)) - DEBUG_MSG( - "Unable to find router " F_MAC " in transtable_{global,local}", - F_MAC_VAR(router->src)); - else - DEBUG_MSG( -- "Unable to find TQ for originator " F_MAC " (router " F_MAC ")", -+ "Unable to find THROUGHPUT for originator " F_MAC " (router " F_MAC ")", - F_MAC_VAR(router->originator), - F_MAC_VAR(router->src)); - } -@@ -679,11 +679,11 @@ static bool election_required(void) - if (!G.best_router) - return true; - -- /* should never happen. G.max_tq also contains G.best_router->tq */ -- if (G.max_tq < G.best_router->tq) -+ /* should never happen. G.max_throughput also contains G.best_router->throughput */ -+ if (G.max_throughput < G.best_router->throughput) - return false; - -- if ((G.max_tq - G.best_router->tq) <= G.hysteresis_thresh) -+ if ((G.max_throughput - G.best_router->throughput) <= G.hysteresis_thresh) - return false; - - return true; -@@ -697,29 +697,29 @@ static void update_ebtables(void) { - struct router *router; - - if (!election_required()) { -- DEBUG_MSG(F_MAC " is still good enough with TQ=%d (max_tq=%d), not executing ebtables", -+ DEBUG_MSG(F_MAC " is still good enough with THROUGHPUT=%d (max_throughput=%d), not executing ebtables", - F_MAC_VAR(G.best_router->src), -- G.best_router->tq, -- G.max_tq); -+ G.best_router->throughput, -+ G.max_throughput); - return; - } - - foreach(router, G.routers) { -- if (router->tq == G.max_tq) { -+ if (router->throughput == G.max_throughput) { - snprintf(mac, sizeof(mac), F_MAC, F_MAC_VAR(router->src)); - break; - } - } - if (G.best_router) -- fprintf(stderr, "Switching from " F_MAC " (TQ=%d) to %s (TQ=%d)\n", -+ fprintf(stderr, "Switching from " F_MAC " (THROUGHPUT=%d) to %s (THROUGHPUT=%d)\n", - F_MAC_VAR(G.best_router->src), -- G.best_router->tq, -+ G.best_router->throughput, - mac, -- G.max_tq); -+ G.max_throughput); - else -- fprintf(stderr, "Switching to %s (TQ=%d)\n", -+ fprintf(stderr, "Switching to %s (THROUGHPUT=%d)\n", - mac, -- G.max_tq); -+ G.max_throughput); - G.best_router = router; - - if (fork_execvp_timeout(&timeout, "ebtables-tiny", (const char *[]) -@@ -804,7 +804,7 @@ int main(int argc, char *argv[]) { - next_invalidation.tv_sec += ORIGINATOR_CACHE_TTL; - } - -- update_tqs(); -+ update_throughputs(); - update_ebtables(); - - next_update = now; diff --git a/patches/batman-v-respondd-ptq1.patch b/patches/batman-v-respondd-ptq1.patch deleted file mode 100644 index 9f6a6ef..0000000 --- a/patches/batman-v-respondd-ptq1.patch +++ /dev/null @@ -1,130 +0,0 @@ -diff --git a/package/gluon-mesh-batman-adv/src/respondd-neighbours.c b/package/gluon-mesh-batman-adv/src/respondd-neighbours.c -index bf5b0315..a7630df9 100644 ---- a/package/gluon-mesh-batman-adv/src/respondd-neighbours.c -+++ b/package/gluon-mesh-batman-adv/src/respondd-neighbours.c -@@ -66,22 +66,21 @@ static struct json_object * ifnames2addrs(struct json_object *interfaces) { - return ret; - } - --static const enum batadv_nl_attrs parse_orig_list_mandatory[] = { -- BATADV_ATTR_ORIG_ADDRESS, -+static const enum batadv_nl_attrs parse_neigh_list_mandatory[] = { - BATADV_ATTR_NEIGH_ADDRESS, -- BATADV_ATTR_TQ, -+ BATADV_ATTR_THROUGHPUT, - BATADV_ATTR_HARD_IFINDEX, - BATADV_ATTR_LAST_SEEN_MSECS, - }; - --static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) -+static int parse_neigh_list_netlink_cb(struct nl_msg *msg, void *arg) - { - struct nlattr *attrs[BATADV_ATTR_MAX+1]; - struct nlmsghdr *nlh = nlmsg_hdr(msg); - struct batadv_nlquery_opts *query_opts = arg; - struct genlmsghdr *ghdr; -- uint8_t *orig; -- uint8_t *dest; -+ uint8_t *neigh; -+ uint32_t throughput; - uint8_t tq; - uint32_t hardif; - uint32_t lastseen; -@@ -97,32 +96,28 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) - - ghdr = nlmsg_data(nlh); - -- if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS) -+ if (ghdr->cmd != BATADV_CMD_GET_NEIGHBORS) - return NL_OK; - - if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0), - genlmsg_len(ghdr), batadv_genl_policy)) - return NL_OK; -- -- if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory, -- BATADV_ARRAY_SIZE(parse_orig_list_mandatory))) -+ -+ if (batadv_genl_missing_attrs(attrs, parse_neigh_list_mandatory, -+ BATADV_ARRAY_SIZE(parse_neigh_list_mandatory))) - return NL_OK; - -- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]); -- dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); -- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]); -+ neigh = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); -+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]); - hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]); - lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]); - -- if (memcmp(orig, dest, 6) != 0) -- return NL_OK; -- - ifname = if_indextoname(hardif, ifname_buf); - if (!ifname) - return NL_OK; - - sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x", -- orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]); -+ neigh[0], neigh[1], neigh[2], neigh[3], neigh[4], neigh[5]); - - struct json_object *obj = json_object_new_object(); - if (!obj) -@@ -134,6 +129,8 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) - json_object_object_add(opts->interfaces, ifname, interface); - } - -+ tq = gluonutil_get_pseudo_tq(throughput); -+ - json_object_object_add(obj, "tq", json_object_new_int(tq)); - json_object_object_add(obj, "lastseen", json_object_new_double(lastseen / 1000.)); - json_object_object_add(obj, "best", json_object_new_boolean(!!attrs[BATADV_ATTR_FLAG_BEST])); -@@ -154,8 +151,8 @@ static struct json_object * get_batadv(void) { - if (!opts.interfaces) - return NULL; - -- ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS, -- parse_orig_list_netlink_cb, NLM_F_DUMP, -+ ret = batadv_genl_query("bat0", BATADV_CMD_GET_NEIGHBORS, -+ parse_neigh_list_netlink_cb, NLM_F_DUMP, - &opts.query_opts); - if (ret < 0) { - json_object_put(opts.interfaces); -diff --git a/package/libgluonutil/src/libgluonutil.c b/package/libgluonutil/src/libgluonutil.c -index 0950f0d8..08cf8fbb 100644 ---- a/package/libgluonutil/src/libgluonutil.c -+++ b/package/libgluonutil/src/libgluonutil.c -@@ -38,6 +38,7 @@ - #include - #include - #include -+#include - - /** - * Merges two JSON objects -@@ -324,6 +325,14 @@ char * gluonutil_get_primary_domain(void) { - return strdup(primary_domain_code); - } - -+uint8_t gluonutil_get_pseudo_tq(uint32_t throughput) { -+ return throughput >= 54000 ? 255 : -+ throughput < 417 ? 0 : -+ (uint8_t)((1.42459274279287898080 * -+ log2(throughput) - -+ 12.39555493934044793479) * -+ 25.5); -+} - - struct json_object * gluonutil_load_site_config(void) { - char *domain_code = NULL; -diff --git a/package/libgluonutil/src/libgluonutil.h b/package/libgluonutil/src/libgluonutil.h -index 34765f6f..82eb64a9 100644 ---- a/package/libgluonutil/src/libgluonutil.h -+++ b/package/libgluonutil/src/libgluonutil.h -@@ -57,4 +57,6 @@ char * gluonutil_get_domain(void); - char * gluonutil_get_primary_domain(void); - struct json_object * gluonutil_load_site_config(void); - -+uint8_t gluonutil_get_pseudo_tq(uint32_t throughput); -+ - #endif /* _LIBGLUON_LIBGLUON_H_ */ diff --git a/patches/batman-v-respondd-statistics.patch b/patches/batman-v-respondd-statistics.patch deleted file mode 100644 index 41c4fac..0000000 --- a/patches/batman-v-respondd-statistics.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/package/gluon-mesh-batman-adv/src/respondd-statistics.c b/package/gluon-mesh-batman-adv/src/respondd-statistics.c -index 86709464..a07dfdbf 100644 ---- a/package/gluon-mesh-batman-adv/src/respondd-statistics.c -+++ b/package/gluon-mesh-batman-adv/src/respondd-statistics.c -@@ -63,7 +63,7 @@ struct gw_netlink_opts { - static const enum batadv_nl_attrs gateways_mandatory[] = { - BATADV_ATTR_ORIG_ADDRESS, - BATADV_ATTR_ROUTER, -- BATADV_ATTR_TQ, -+ BATADV_ATTR_THROUGHPUT, - }; - - static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg) -@@ -74,7 +74,7 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg) - struct genlmsghdr *ghdr; - uint8_t *orig; - uint8_t *router; -- uint8_t tq; -+ uint32_t throughput; - struct gw_netlink_opts *opts; - char addr[18]; - -@@ -102,13 +102,13 @@ static int parse_gw_list_netlink_cb(struct nl_msg *msg, void *arg) - - orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]); - router = nla_data(attrs[BATADV_ATTR_ROUTER]); -- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]); -+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]); - - sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", - orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]); - - json_object_object_add(opts->obj, "gateway", json_object_new_string(addr)); -- json_object_object_add(opts->obj, "gateway_tq", json_object_new_int(tq)); -+ json_object_object_add(opts->obj, "gateway_throughput", json_object_new_int(throughput)); - - sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", - router[0], router[1], router[2], router[3], router[4], router[5]); diff --git a/patches/batman-v-show-tp-on-status-page.patch b/patches/batman-v-show-tp-on-status-page.patch deleted file mode 100644 index 07151e6..0000000 --- a/patches/batman-v-show-tp-on-status-page.patch +++ /dev/null @@ -1,123 +0,0 @@ -diff --git a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua -index 733e6d7c..e512bbe9 100644 ---- a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua -+++ b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua -@@ -5,6 +5,6 @@ return { - -- 2) human-readable key (not translatable yet) - -- 3) value suffix (optional) - attrs = { -- {'tq', 'TQ', ' %'}, -+ {'tp', 'bit/s', ''}, - }, - } -diff --git a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c -index b923d7f1..8fa94d72 100644 ---- a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c -+++ b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c -@@ -14,27 +14,28 @@ struct neigh_netlink_opts { - struct batadv_nlquery_opts query_opts; - }; - --static const enum batadv_nl_attrs parse_orig_list_mandatory[] = { -- BATADV_ATTR_ORIG_ADDRESS, -+static const enum batadv_nl_attrs parse_neigh_list_mandatory[] = { - BATADV_ATTR_NEIGH_ADDRESS, -- BATADV_ATTR_TQ, -+ BATADV_ATTR_THROUGHPUT, - BATADV_ATTR_HARD_IFINDEX, - BATADV_ATTR_LAST_SEEN_MSECS, - }; - --static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) -+static int parse_neigh_list_netlink_cb(struct nl_msg *msg, void *arg) - { - struct nlattr *attrs[BATADV_ATTR_MAX+1]; - struct nlmsghdr *nlh = nlmsg_hdr(msg); - struct batadv_nlquery_opts *query_opts = arg; - struct genlmsghdr *ghdr; -- uint8_t *orig; -- uint8_t *dest; -- uint8_t tq; -+ uint8_t *neigh; -+ uint32_t throughput; - uint32_t hardif; - char ifname_buf[IF_NAMESIZE], *ifname; - struct neigh_netlink_opts *opts; - char mac1[18]; -+ char tp_str[5]; -+ const char tp_units[] = { 'k', 'M', 'G', 'T', '?' }; -+ int tp_unit; - - opts = batadv_container_of(query_opts, struct neigh_netlink_opts, query_opts); - -@@ -43,41 +44,43 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) - - ghdr = nlmsg_data(nlh); - -- if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS) -+ if (ghdr->cmd != BATADV_CMD_GET_NEIGHBORS) - return NL_OK; - - if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0), - genlmsg_len(ghdr), batadv_genl_policy)) - return NL_OK; - -- if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory, -- BATADV_ARRAY_SIZE(parse_orig_list_mandatory))) -+ if (batadv_genl_missing_attrs(attrs, parse_neigh_list_mandatory, -+ BATADV_ARRAY_SIZE(parse_neigh_list_mandatory))) - return NL_OK; - -- orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]); -- dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); -- tq = nla_get_u8(attrs[BATADV_ATTR_TQ]); -+ neigh = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); -+ throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]); - hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]); - -- if (memcmp(orig, dest, 6) != 0) -- return NL_OK; -- - ifname = if_indextoname(hardif, ifname_buf); - if (!ifname) - return NL_OK; - - sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x", -- orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]); -+ neigh[0], neigh[1], neigh[2], neigh[3], neigh[4], neigh[5]); - -- struct json_object *neigh = json_object_new_object(); -- if (!neigh) -+ struct json_object *obj = json_object_new_object(); -+ if (!obj) - return NL_OK; - -- json_object_object_add(neigh, "tq", json_object_new_int(tq * 100 / 255)); -- json_object_object_add(neigh, "ifname", json_object_new_string(ifname)); -- json_object_object_add(neigh, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST])); -+ for (tp_unit = 0; tp_unit < 4; tp_unit++) { -+ if (throughput < 1000) break; -+ throughput /= 1000; -+ } -+ sprintf(tp_str, "%3u%c", throughput, tp_units[tp_unit]); -+ -+ json_object_object_add(obj, "tp", json_object_new_string(tp_str)); -+ json_object_object_add(obj, "ifname", json_object_new_string(ifname)); -+ json_object_object_add(obj, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST])); - -- json_object_object_add(opts->obj, mac1, neigh); -+ json_object_object_add(opts->obj, mac1, obj); - - return NL_OK; - } -@@ -94,8 +97,8 @@ static json_object *neighbours(void) { - if (!opts.obj) - return NULL; - -- ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS, -- parse_orig_list_netlink_cb, NLM_F_DUMP, -+ ret = batadv_genl_query("bat0", BATADV_CMD_GET_NEIGHBORS, -+ parse_neigh_list_netlink_cb, NLM_F_DUMP, - &opts.query_opts); - if (ret < 0) { - json_object_put(opts.obj); diff --git a/patches/batman-v-wired-tpo.patch b/patches/batman-v-wired-tpo.patch deleted file mode 100644 index 08d3be1..0000000 --- a/patches/batman-v-wired-tpo.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo -new file mode 100755 -index 00000000..75888537 ---- /dev/null -+++ b/package/gluon-mesh-batman-adv/files/lib/gluon/core/mesh/post-setup.d/40-gluon-mesh-batman-adv-wired-tpo -@@ -0,0 +1,6 @@ -+#!/bin/sh -+ -+if [ "$IFNAME" = "vx_mesh_uplink" ] || [ "$IFNAME" = "vx_mesh_other" ] || [ "$IFNAME" = "mesh-vpn" ]; then -+ sleep 3; -+ batctl hardif $IFNAME throughput_override 1000mbit; -+fi diff --git a/site.conf b/site.conf index 6699ec6..32135d6 100644 --- a/site.conf +++ b/site.conf @@ -75,8 +75,8 @@ vxlan = false, filter_membership_reports = false, batman_adv = { - routing_algo = 'BATMAN_V', - gw_sel_class = 1500, + routing_algo = 'BATMAN_IV', + gw_sel_class = 1, }, }, @@ -104,48 +104,90 @@ pubkey_privacy = false, wireguard = { - broker = '01.wg-node.freifunk-aachen.de:8000/api/add_key', + broker = 'wg-broker.freifunk-aachen.de/api/add_key', peers = { - sn20 = { + --[[ remove sn1 for now + sn120 = { public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=', endpoint = '01.wg-node.freifunk-aachen.de:51820' }, - sn11 = { + sn111 = { public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=', endpoint = '01.wg-node.freifunk-aachen.de:51811' }, - sn12 = { - public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=', + sn112 = { + public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsn1jugaSIJ7VBHM=', endpoint = '01.wg-node.freifunk-aachen.de:51812' }, - sn13 = { + sn113 = { public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=', endpoint = '01.wg-node.freifunk-aachen.de:51813' }, - sn14 = { + sn114 = { public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=', endpoint = '01.wg-node.freifunk-aachen.de:51814' }, - sn15 = { + sn115 = { public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=', endpoint = '01.wg-node.freifunk-aachen.de:51815' }, - sn16 = { + sn116 = { public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=', endpoint = '01.wg-node.freifunk-aachen.de:51816' }, - sn17 = { + sn117 = { public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=', endpoint = '01.wg-node.freifunk-aachen.de:51817' }, - sn18 = { + sn118 = { public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=', endpoint = '01.wg-node.freifunk-aachen.de:51818' }, - sn19 = { + sn119 = { public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=', endpoint = '01.wg-node.freifunk-aachen.de:51819' }, + ]] + sn220 = { + public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=', + endpoint = '02.wg-node.freifunk-aachen.de:51820' + }, + sn211 = { + public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=', + endpoint = '02.wg-node.freifunk-aachen.de:51811' + }, + sn212 = { + public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=', + endpoint = '02.wg-node.freifunk-aachen.de:51812' + }, + sn213 = { + public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=', + endpoint = '02.wg-node.freifunk-aachen.de:51813' + }, + sn214 = { + public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=', + endpoint = '02.wg-node.freifunk-aachen.de:51814' + }, + sn215 = { + public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=', + endpoint = '02.wg-node.freifunk-aachen.de:51815' + }, + sn216 = { + public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=', + endpoint = '02.wg-node.freifunk-aachen.de:51816' + }, + sn217 = { + public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=', + endpoint = '02.wg-node.freifunk-aachen.de:51817' + }, + sn218 = { + public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=', + endpoint = '02.wg-node.freifunk-aachen.de:51818' + }, + sn219 = { + public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=', + endpoint = '02.wg-node.freifunk-aachen.de:51819' + }, }, mtu = 1406, }, @@ -292,6 +334,13 @@ tq_limit_max = 55, -- upper limit, above that the online SSID will be used tq_limit_min = 45, -- lower limit, below that the offline SSID will be used }, + + update_channel = { + --from_name = false, -- remove or false to catch all + -- if to_name is defined, autoupdater branch is set to it + to_name = 'stable', + + } } -- /* vi: set ft=lua: */ diff --git a/site.mk b/site.mk index c2de233..11fd857 100644 --- a/site.mk +++ b/site.mk @@ -1,4 +1,4 @@ -## gluon site.mk Freifunk Regio Aachen +## gluon site.mk Freifunk Regio Aachen GLUON_DEPRECATED=upgrade GLUON_FEATURES := \ @@ -30,9 +30,9 @@ GLUON_FEATURES := \ # ffho-autoupdater-wifi-fallback \ GLUON_SITE_PACKAGES := \ iwinfo \ - eulenfunk-hotfix \ gluon-ssid-changer \ - gluon-weeklyreboot \ + ff-change-autoupdater \ + ffho-autoupdater-wifi-fallback \ ff-wg-registration \ respondd-module-airtime @@ -53,7 +53,7 @@ GLUON_PRIORITY ?= 0 GLUON_REGION ?= eu # Languages to include -GLUON_LANGS ?= en de +GLUON_LANGS ?= en de fr # Additional package list generated by contrib/genpkglist.py INCLUDE_USB := \ @@ -331,4 +331,4 @@ endif ifeq ($(GLUON_TARGET),x86-legacy) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) -endif +endif \ No newline at end of file From 40fecbff52dfe54ae11a8db3c2ae52889d144645 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 6 May 2023 16:48:52 +0200 Subject: [PATCH 037/129] update gluon_git_ref --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 54e9157..3d458df 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := next v2023.1.x +GLUON_GIT_REF := next #v2023.1.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key From b65da176c876a24c5901981656f439c27ffb170a Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 18 May 2023 12:20:23 +0200 Subject: [PATCH 038/129] update version to v2023.2.0-1 * use community-packages * use ffac-bat4-mesh mesh id --- CHANGELOG.md | 73 ++--------------------------- Makefile | 4 +- README.md | 2 +- modules | 16 ++----- patches/targets-ramips-mt7621.patch | 37 --------------- site.conf | 30 +++++------- site.mk | 11 ++--- 7 files changed, 28 insertions(+), 145 deletions(-) delete mode 100644 patches/targets-ramips-mt7621.patch diff --git a/CHANGELOG.md b/CHANGELOG.md index deef13b..1fd4da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,73 +1,10 @@ # Freifunk Aachen Firmware Changelog -## v2023.1.x +## v2023.2.0-x -## v2023.1.1 +## v2023.2.0-1 - switch to openwrt master + - build from gluon master + - this will be released as v2023.2.1 gluon someday hopefully - remove mbedtls and stay with openssl for now - -## v2022.1.13 - - update segments - - update gluon to v2022.1.3 - - add qemu-ga to x86-64 - - add openssh-sftp-server to make using scp in the future as easy as it is now - - add djfe signing key - - switch to ffac repo mirrors - - add eulenfunk hotfix patches - - easier targets in makefile - - switch default autoupdater branch to stable - - ## v2022.1.12 - - revert to v2022.1.1 as v2022.1.2 did break on some devices - -## v2022.1.11 - - add anonymization on status page - - add weekly-reboot - - add asus rt-ax53u - - remove USB for EX3700 as one device was softbricked - - fix bash script in wg-registration - -## v2022.1.10 - - use own tile layer in config mode - - fix translations - - remove fastd config - - set gw_sel_class=1500 and mut=1406 - - fix switch config for o2 box 6431 - - remove TLS from d-link dir825b1 - -## v2022.1.9 - - working experimental autoupdater - - fix community-build key for autoupdater - -## v2022.1.8 - - add TLS packages (needed for opkg update) - - add asus rt-ax53u - - update wg-registration - -## v2022.1.7 - - add TLS packages - - add LICENSE - - add patches from FFMUC - -## v2022.1.6 - - remove TLS packages - -## v2022.1.5 - - update gluon build to v2022.1.x - -## v2022.1.4 - - use ffac-bat5-mesh as mesh-ssid for new firmware (5GHz) - -## v2022.1.3 - - working Broker Registration for Wireguard keys - - update wg-registration - - add broker url to site config - -## v2022.1.2 - - use ffac-bat5-mesh as mesh-ssid for new firmware (2.4GHz) - -## v2022.1.1 - - add FB7330 (SL) and FB7430 - - ## v2022.1.0 - - initial working v2022 wireguard configuration \ No newline at end of file + - switch to ffac-bat4-mesh mesh id diff --git a/Makefile b/Makefile index 3d458df..6b35740 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := next #v2023.1.x +GLUON_GIT_REF := next #v2023.2.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key @@ -43,7 +43,7 @@ build: gluon-prepare done manifest: build - for branch in experimental testing stable; do \ + for branch in experimental beta stable; do \ ${GLUON_MAKE} manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ done mv -f ${GLUON_BUILD_DIR}/output/* ./output/ diff --git a/README.md b/README.md index 7b05429..bb6f35c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ This repository contains the site configuration for the Freifunk Aachen Gluon firmware. -This is the `v2023.1.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.1.x once released. +This is the `v2023.2.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.2.x once released. Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x. It provides an option to test devices which are available in Gluon's master branch but are not released yet. diff --git a/modules b/modules index af525fe..a5bfd9a 100644 --- a/modules +++ b/modules @@ -1,13 +1,5 @@ -GLUON_SITE_FEEDS="ffac eulenfunk ffho" +GLUON_SITE_FEEDS="ffac" -PACKAGES_FFAC_REPO=https://github.com/ffac/gluon-mesh-vpn-wireguard.git -PACKAGES_FFAC_COMMIT=660d294e89ca92f5d7302d60de0bc37957b85932 -PACKAGES_FFAC_BRANCH=main - -PACKAGES_EULENFUNK_REPO=https://github.com/ffac/eulenfunk-packages.git -PACKAGES_EULENFUNK_COMMIT=1fb39648239dda47f2f7bbb24b5c683e5078dff7 -PACKAGES_EULENFUNK_BRANCH=v2020.1.x - -PACKAGES_FFHO_REPO=https://github.com/ffac/ffho-packages.git -PACKAGES_FFHO_COMMIT=31b7d547abf57e27f15311b4d92146f2389b9e50 -PACKAGES_FFHO_BRANCH=master +PACKAGES_FFAC_REPO=https://github.com/ffac/community-packages.git +PACKAGES_FFAC_COMMIT=b74de3db2965a02603ec7b2a32b719c6418105a2 +PACKAGES_FFAC_BRANCH=master diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch deleted file mode 100644 index 9dce406..0000000 --- a/patches/targets-ramips-mt7621.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 7c7fa151..5116551f 100644 ---- a/targets/ramips-mt7621 -+++ b/targets/ramips-mt7621 -@@ -4,9 +4,32 @@ device('asus-rt-ac57u', 'asus_rt-ac57u', { - factory = false, - }) - -+device('asus-rt-ax53u', 'asus_rt-ax53u', { -+ factory = false, -+}) -+ - - -- Cudy - -+device('cudy-x6', 'cudy_x6', { -+ factory = false, -+}) -+ -+device('cudy-m1800', 'cudy_m1800', { -+ factory = false, -+}) -+ -+device('cudy-wr1300-v1', 'cudy_wr1300-v1', { -+ factory = false, -+}) -+ -+device('cudy-wr1300-v2', 'cudy_wr1300-v2', { -+ factory = false, -+ manifest_aliases = { -+ 'cudy-wr1300-v3', -+ }, -+}) -+ - device('cudy-wr2100', 'cudy_wr2100', { - factory = false, - }) diff --git a/site.conf b/site.conf index 32135d6..4bbc80a 100644 --- a/site.conf +++ b/site.conf @@ -48,7 +48,7 @@ ssid = 'Freifunk', }, mesh = { - id = 'ffac-bat5-mesh', + id = 'ffac-bat4-mesh', mcast_rate = 12000, }, }, @@ -60,7 +60,7 @@ ssid = 'Freifunk', }, mesh = { - id = 'ffac-bat5-mesh', + id = 'ffac-bat4-mesh', mcast_rate = 12000, }, }, @@ -218,9 +218,9 @@ stable = { name = 'stable', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade', - 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.2.x/stable/sysupgrade', + 'http://updates.ffac.rocks/from-2023.2.x/stable/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.2.x/stable/sysupgrade', }, good_signatures = 4, pubkeys = { @@ -239,9 +239,9 @@ beta = { name = 'beta', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade', - 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.2.x/beta/sysupgrade', + 'http://updates.ffac.rocks/from-2023.2.x/beta/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.2.x/beta/sysupgrade', }, good_signatures = 3, pubkeys = { @@ -260,10 +260,9 @@ experimental = { name = 'experimental', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade', - 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade', - 'http://community-build.freifunk-aachen.de/firmware/from-2023.1.x/experimental/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.2.x/experimental/sysupgrade', + 'http://updates.ffac.rocks/from-2023.2.x/experimental/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.2.x/experimental/sysupgrade', }, good_signatures = 2, pubkeys = { @@ -334,13 +333,6 @@ tq_limit_max = 55, -- upper limit, above that the online SSID will be used tq_limit_min = 45, -- lower limit, below that the offline SSID will be used }, - - update_channel = { - --from_name = false, -- remove or false to catch all - -- if to_name is defined, autoupdater branch is set to it - to_name = 'stable', - - } } -- /* vi: set ft=lua: */ diff --git a/site.mk b/site.mk index 11fd857..3e78aa2 100644 --- a/site.mk +++ b/site.mk @@ -1,4 +1,4 @@ -## gluon site.mk Freifunk Regio Aachen +## gluon site.mk Freifunk Regio Aachen GLUON_DEPRECATED=upgrade GLUON_FEATURES := \ @@ -30,10 +30,9 @@ GLUON_FEATURES := \ # ffho-autoupdater-wifi-fallback \ GLUON_SITE_PACKAGES := \ iwinfo \ - gluon-ssid-changer \ - ff-change-autoupdater \ - ffho-autoupdater-wifi-fallback \ - ff-wg-registration \ + ffac-ssid-changer \ + ffac-autoupdater-wifi-fallback \ + ffac-wg-registration \ respondd-module-airtime # gluon-mesh-wireless-sae @@ -44,7 +43,7 @@ DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) -DEFAULT_GLUON_CHECKOUT := v2023.1.x +DEFAULT_GLUON_CHECKOUT := v2023.2.x GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT) From 02f7f936046097575c4569e86c3982767672b628 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 20 May 2023 20:43:40 +0200 Subject: [PATCH 039/129] disable autoupdater-wifi-fallback on tiny --- site.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/site.mk b/site.mk index 3e78aa2..a63ad77 100644 --- a/site.mk +++ b/site.mk @@ -31,12 +31,14 @@ GLUON_FEATURES := \ GLUON_SITE_PACKAGES := \ iwinfo \ ffac-ssid-changer \ - ffac-autoupdater-wifi-fallback \ ffac-wg-registration \ respondd-module-airtime # gluon-mesh-wireless-sae -# GLUON_FEATURES_standard := wireless-encryption-wpa3 +# wireless-encryption-wpa3 +GLUON_FEATURES_standard := \ + ffac-autoupdater-wifi-fallback \ + web-cellular \ DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H') From 91c15f69667a4f04049548110b8b7057373b3140 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 20 May 2023 21:07:28 +0200 Subject: [PATCH 040/129] fix GLUON_SITE_PACKAGES_tiny --- site.mk | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/site.mk b/site.mk index a63ad77..a071a6b 100644 --- a/site.mk +++ b/site.mk @@ -37,10 +37,13 @@ GLUON_SITE_PACKAGES := \ # gluon-mesh-wireless-sae # wireless-encryption-wpa3 GLUON_FEATURES_standard := \ - ffac-autoupdater-wifi-fallback \ - web-cellular \ + web-cellular -DEFAULT_GLUON_RELEASE := 2023.1-1~exp$(shell date '+%Y%m%d%H') +GLUON_SITE_PACKAGES_tiny := \ + ffac-autoupdater-wifi-fallback + + +DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) From efc61653e3bcb80dff1bb2a50e3f28eadb81af40 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 21 May 2023 01:00:59 +0200 Subject: [PATCH 041/129] fix tiny devices again --- site.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site.mk b/site.mk index a071a6b..36dd152 100644 --- a/site.mk +++ b/site.mk @@ -39,7 +39,7 @@ GLUON_SITE_PACKAGES := \ GLUON_FEATURES_standard := \ web-cellular -GLUON_SITE_PACKAGES_tiny := \ +GLUON_SITE_PACKAGES_standard := \ ffac-autoupdater-wifi-fallback From 4cb4421f9f024a1a800b270d3a0a327ac0a1a7f9 Mon Sep 17 00:00:00 2001 From: FFAC Date: Mon, 22 May 2023 14:57:48 +0000 Subject: [PATCH 042/129] update ath79 patches --- patches/targets-ath79-generic.patch | 38 +++++++++++++++++++++++++++-- site.mk | 2 +- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index ab1290c..507e6d4 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,42 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index e9083bea..e1300b89 100644 +index 38041833..2bf0dbfb 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -606,3 +606,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -412,11 +412,11 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { + -- }, + --}) + +-device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', { +- packages = ATH10K_PACKAGES_QCA9888, +- broken = true, -- OOM with 5GHz enabled in most environments +- class = 'tiny', -- 64M ath9k + ath10k +-}) ++--device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', { ++-- packages = ATH10K_PACKAGES_QCA9888, ++-- broken = true, -- OOM with 5GHz enabled in most environments ++-- class = 'tiny', -- 64M ath9k + ath10k ++--}) + + device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', { + packages = ATH10K_PACKAGES_QCA9880, +@@ -503,11 +503,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { + }, + }) + +-device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { +- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, +- broken = true, -- OOM with 5GHz enabled in most environments +- class = 'tiny', -- 64M ath9k + ath10k +-}) ++--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { ++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, ++-- broken = true, -- OOM with 5GHz enabled in most environments ++-- class = 'tiny', -- 64M ath9k + ath10k ++--}) + + device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { + manifest_aliases = { +@@ -600,3 +600,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/site.mk b/site.mk index 36dd152..115215f 100644 --- a/site.mk +++ b/site.mk @@ -335,4 +335,4 @@ endif ifeq ($(GLUON_TARGET),x86-legacy) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) -endif \ No newline at end of file +endif From 5cb37c0aaa48ea8c73c06b18bf2d3e9798bfe756 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Tue, 23 May 2023 16:07:48 +0200 Subject: [PATCH 043/129] Update site.mk add GLUON_SITE_PACKAGES correctly --- site.mk | 7 ------- 1 file changed, 7 deletions(-) diff --git a/site.mk b/site.mk index 115215f..a798e27 100644 --- a/site.mk +++ b/site.mk @@ -22,12 +22,6 @@ GLUON_FEATURES := \ # selection that would be enabled by default or due to the # chosen feature flags - -# -gluon-status-page -#ffac-status-page -# custom status page without contact information - -# ffho-autoupdater-wifi-fallback \ GLUON_SITE_PACKAGES := \ iwinfo \ ffac-ssid-changer \ @@ -42,7 +36,6 @@ GLUON_FEATURES_standard := \ GLUON_SITE_PACKAGES_standard := \ ffac-autoupdater-wifi-fallback - DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line From 2d62924e80871afbda28e9bff7078b280ddc2692 Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 30 May 2023 11:59:43 +0000 Subject: [PATCH 044/129] remove fr and broken devices --- patches/targets-ramips-mt7620.patch | 53 +++++++++++++++++++++++++++++ patches/targets-ramips-mt76x8.patch | 15 +++++++- patches/targets-xrx200.patch | 25 ++++++++++++++ site.mk | 10 +----- 4 files changed, 93 insertions(+), 10 deletions(-) create mode 100644 patches/targets-ramips-mt7620.patch create mode 100644 patches/targets-xrx200.patch diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch new file mode 100644 index 0000000..347e32f --- /dev/null +++ b/patches/targets-ramips-mt7620.patch @@ -0,0 +1,53 @@ +diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 +index fbf57ba8..ed06eee2 100644 +--- a/targets/ramips-mt7620 ++++ b/targets/ramips-mt7620 +@@ -29,16 +29,6 @@ device('netgear-ex3700', 'netgear_ex3700', { + factory_ext = '.chk', + }) + +--- Nexx +- +-device('nexx-wt3020-8m', 'nexx_wt3020-8m', { +- aliases = { +- 'nexx-wt3020ad', +- 'nexx-wt3020f', +- 'nexx-wt3020h', +- }, +-}) +- + -- TP-Link + + local tplink_region_suffix = '' +@@ -46,20 +36,20 @@ if (env.GLUON_REGION or '') ~= '' then + tplink_region_suffix = '-' .. env.GLUON_REGION + end + +-device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { +- factory = false, +-}) ++--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { ++-- factory = false, ++--}) + +-device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { +- factory = false, +-}) ++--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { ++-- factory = false, ++--}) + +-device('tp-link-archer-c20i', 'tplink_archer-c20i') ++--device('tp-link-archer-c20i', 'tplink_archer-c20i') + +-device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { +- factory = '-squashfs-factory' .. tplink_region_suffix, +- manifest_aliases = {'tp-link-archer-c50'}, +-}) ++--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { ++-- factory = '-squashfs-factory' .. tplink_region_suffix, ++-- manifest_aliases = {'tp-link-archer-c50'}, ++--}) + + + -- Xiaomi diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch index 5e86c40..cee089f 100644 --- a/patches/targets-ramips-mt76x8.patch +++ b/patches/targets-ramips-mt76x8.patch @@ -1,7 +1,20 @@ diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 -index b11b7672..95a4c343 100644 +index 1ebce768..7584d372 100644 --- a/targets/ramips-mt76x8 +++ b/targets/ramips-mt76x8 +@@ -20,9 +20,9 @@ device('gl.inet-vixmini', 'glinet_vixmini', { + + -- Netgear + +-device('netgear-r6020', 'netgear_r6020', { +- factory_ext = '.img', +-}) ++--device('netgear-r6020', 'netgear_r6020', { ++-- factory_ext = '.img', ++--}) + + device('netgear-r6120', 'netgear_r6120', { + factory_ext = '.img', @@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', { }, }) diff --git a/patches/targets-xrx200.patch b/patches/targets-xrx200.patch new file mode 100644 index 0000000..f6cd157 --- /dev/null +++ b/patches/targets-xrx200.patch @@ -0,0 +1,25 @@ +diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 +index f54cd87f..c7df2bb9 100644 +--- a/targets/lantiq-xrx200 ++++ b/targets/lantiq-xrx200 +@@ -51,20 +51,3 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { + factory = false, + aliases = {'o2-box-6431'}, + }) +- +--- TP-Link +- +--- CAVEAT: These devices don't have a dedicated WAN port. +--- All ethernet ports on the device are bridged and +--- used as WAN ports. Clients connected to these +--- ports will be connected to your private network. +- +-device('tp-link-td-w8970', 'tplink_tdw8970', { +- factory = false, +-}) +- +-device('tp-link-td-w8980', 'tplink_tdw8980', { +- factory = false, +- aliases = {'tp-link-td-w9980'}, +- broken = true, -- 5GHz unsupported +-}) diff --git a/site.mk b/site.mk index a798e27..ed962e3 100644 --- a/site.mk +++ b/site.mk @@ -28,14 +28,6 @@ GLUON_SITE_PACKAGES := \ ffac-wg-registration \ respondd-module-airtime -# gluon-mesh-wireless-sae -# wireless-encryption-wpa3 -GLUON_FEATURES_standard := \ - web-cellular - -GLUON_SITE_PACKAGES_standard := \ - ffac-autoupdater-wifi-fallback - DEFAULT_GLUON_RELEASE := 2023.2.0-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line @@ -50,7 +42,7 @@ GLUON_PRIORITY ?= 0 GLUON_REGION ?= eu # Languages to include -GLUON_LANGS ?= en de fr +GLUON_LANGS ?= en de # Additional package list generated by contrib/genpkglist.py INCLUDE_USB := \ From 3d192b6a2c94988d52687d8e8263dca7234bc576 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 5 Jun 2023 23:58:44 +0200 Subject: [PATCH 045/129] remove patches - use v23.05 branch --- Makefile | 2 +- patches/010-primary-mac.patch | 12 ----- patches/020-interfaces.patch | 16 ------ patches/cellular.patch | 30 ----------- patches/targets-ath79-generic.patch | 53 -------------------- patches/targets-bcm2711-raspberry-pi-4.patch | 26 ---------- patches/targets-ipq40xx-devices.patch | 26 ---------- patches/targets-mediatek-mt7622.patch | 13 ----- patches/targets-ramips-mt7620.patch | 53 -------------------- patches/targets-ramips-mt76x8.patch | 32 ------------ patches/targets-xrx200.patch | 25 --------- 11 files changed, 1 insertion(+), 287 deletions(-) delete mode 100644 patches/010-primary-mac.patch delete mode 100644 patches/020-interfaces.patch delete mode 100644 patches/cellular.patch delete mode 100644 patches/targets-ath79-generic.patch delete mode 100644 patches/targets-bcm2711-raspberry-pi-4.patch delete mode 100644 patches/targets-ipq40xx-devices.patch delete mode 100644 patches/targets-mediatek-mt7622.patch delete mode 100644 patches/targets-ramips-mt7620.patch delete mode 100644 patches/targets-ramips-mt76x8.patch delete mode 100644 patches/targets-xrx200.patch diff --git a/Makefile b/Makefile index 6b35740..6c42cd4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/ffac/gluon.git -GLUON_GIT_REF := next #v2023.2.x +GLUON_GIT_REF := v23.05 #v2023.2.x PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch deleted file mode 100644 index 87ddb25..0000000 --- a/patches/010-primary-mac.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index b1a1bab..5ce9635 100644 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -@@ -81,6 +81,7 @@ local primary_addrs = { - {'brcm2708'}, - {'ipq40xx', 'generic', { - 'avm,fritzbox-4040', -+ 'linksys,mr8300', - 'plasmacloud,pa1200', - 'plasmacloud,pa2200', - }}, diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch deleted file mode 100644 index f0c92b9..0000000 --- a/patches/020-interfaces.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 063ab1a1..9f847082 100755 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', { - 'arcadyan,vgv7510kw22-nor', - }) then - lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' -+elseif platform.match('lantiq', 'xrx200', { -+ 'tplink,tdw8970', -+ 'tplink,tdw8980', -+}) then -+ lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan4' - elseif platform.match('realtek', 'rtl838x', { - 'd-link,dgs-1210-10p', - }) then diff --git a/patches/cellular.patch b/patches/cellular.patch deleted file mode 100644 index defcb0f..0000000 --- a/patches/cellular.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index 6debe8c..5e9e161 100644 ---- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -@@ -85,6 +85,10 @@ function M.is_cellular_device() - 'wavlink,ws-wn572hp3-4g', - }) then - return true -+ elseif M.match('ramips', 'mt76x8', { -+ 'tplink,tl-mr6400-v5', -+ }) then -+ return true - end - - return false -diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -index b60d8e6..4631d4f 100644 ---- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -@@ -58,6 +58,10 @@ elseif platform.match('ramips', 'mt7621', { - 'wavlink,ws-wn572hp3-4g', - }) then - setup_ncm_qmi('/dev/ttyUSB2', 'ncm', 15) -+elseif platform.match('ramips', 'mt76x8', { -+ 'tplink,tl-mr6400-v5', -+}) then -+ setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) - end - - uci:save('network') diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch deleted file mode 100644 index 507e6d4..0000000 --- a/patches/targets-ath79-generic.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/targets/ath79-generic b/targets/ath79-generic -index 38041833..2bf0dbfb 100644 ---- a/targets/ath79-generic -+++ b/targets/ath79-generic -@@ -412,11 +412,11 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { - -- }, - --}) - --device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', { -- packages = ATH10K_PACKAGES_QCA9888, -- broken = true, -- OOM with 5GHz enabled in most environments -- class = 'tiny', -- 64M ath9k + ath10k --}) -+--device('tp-link-archer-c60-v1', 'tplink_archer-c60-v1', { -+-- packages = ATH10K_PACKAGES_QCA9888, -+-- broken = true, -- OOM with 5GHz enabled in most environments -+-- class = 'tiny', -- 64M ath9k + ath10k -+--}) - - device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', { - packages = ATH10K_PACKAGES_QCA9880, -@@ -503,11 +503,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { - }, - }) - --device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { -- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, -- broken = true, -- OOM with 5GHz enabled in most environments -- class = 'tiny', -- 64M ath9k + ath10k --}) -+--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { -+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, -+-- broken = true, -- OOM with 5GHz enabled in most environments -+-- class = 'tiny', -- 64M ath9k + ath10k -+--}) - - device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { - manifest_aliases = { -@@ -600,3 +600,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { - }) - - device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') -+ -+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { -+ packages = ATH10K_PACKAGES_QCA9880, -+}) -+ -+ -+-- Zyxel -+ -+device('zyxel-nbg6616', 'zyxel_nbg6616', { -+ packages = ATH10K_PACKAGES_QCA9880, -+}) diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch deleted file mode 100644 index 0c71d24..0000000 --- a/patches/targets-bcm2711-raspberry-pi-4.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711 -new file mode 100644 -index 00000000..ba631911 ---- /dev/null -+++ b/targets/bcm27xx-bcm2711 -@@ -0,0 +1,9 @@ -+include 'bcm27xx.inc' -+ -+device('raspberry-pi-4-model-b', 'rpi-4', { -+ manifest_aliases = { -+ 'raspberry-pi-4-model-b-rev-1.1', -+ 'raspberry-pi-4-model-b-rev-1.2', -+ 'raspberry-pi-4-model-b-rev-1.4', -+ }, -+}) -diff --git a/targets/targets.mk b/targets/targets.mk -index 92b58ab8..05a74935 100644 ---- a/targets/targets.mk -+++ b/targets/targets.mk -@@ -22,5 +22,6 @@ $(eval $(call GluonTarget,x86,64)) - - ifneq ($(BROKEN),) - $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested -+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested - $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support - endif diff --git a/patches/targets-ipq40xx-devices.patch b/patches/targets-ipq40xx-devices.patch deleted file mode 100644 index 3903694..0000000 --- a/patches/targets-ipq40xx-devices.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index 246fe066..1247cac4 100644 ---- a/targets/ipq40xx-generic -+++ b/targets/ipq40xx-generic -@@ -87,6 +87,21 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { - - device('linksys-ea6350v3', 'linksys_ea6350v3') - -+device('linksys-mr8300-dallas', 'linksys_mr8300', { -+ packages = { -- exclude until Gluon supports third radio -+ '-ath10k-firmware-qca9888-ct', -+ '-ath10k-board-qca9888', -+ }, -+ factory = false, -+ broken = true, -- 3rd WiFi radio not supported (5GHz DFS channels 100+) -+}) -+ -+-- Meraki -+ -+device('meraki-mr33', 'meraki_mr33', { -+ factory = false, -+}) -+ - - -- NETGEAR - diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch deleted file mode 100644 index 1b25eff..0000000 --- a/patches/targets-mediatek-mt7622.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622 -index 8376c397..7ab6330a 100644 ---- a/targets/mediatek-mt7622 -+++ b/targets/mediatek-mt7622 -@@ -17,3 +17,8 @@ device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', { - factory = false, - }) - -+-- Netgear -+ -+device('netgear-wax206', 'netgear_wax206', { -+ factory_ext = '.img', -+}) diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch deleted file mode 100644 index 347e32f..0000000 --- a/patches/targets-ramips-mt7620.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 -index fbf57ba8..ed06eee2 100644 ---- a/targets/ramips-mt7620 -+++ b/targets/ramips-mt7620 -@@ -29,16 +29,6 @@ device('netgear-ex3700', 'netgear_ex3700', { - factory_ext = '.chk', - }) - ---- Nexx -- --device('nexx-wt3020-8m', 'nexx_wt3020-8m', { -- aliases = { -- 'nexx-wt3020ad', -- 'nexx-wt3020f', -- 'nexx-wt3020h', -- }, --}) -- - -- TP-Link - - local tplink_region_suffix = '' -@@ -46,20 +36,20 @@ if (env.GLUON_REGION or '') ~= '' then - tplink_region_suffix = '-' .. env.GLUON_REGION - end - --device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { -- factory = false, --}) -+--device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { -+-- factory = false, -+--}) - --device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { -- factory = false, --}) -+--device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { -+-- factory = false, -+--}) - --device('tp-link-archer-c20i', 'tplink_archer-c20i') -+--device('tp-link-archer-c20i', 'tplink_archer-c20i') - --device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { -- factory = '-squashfs-factory' .. tplink_region_suffix, -- manifest_aliases = {'tp-link-archer-c50'}, --}) -+--device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { -+-- factory = '-squashfs-factory' .. tplink_region_suffix, -+-- manifest_aliases = {'tp-link-archer-c50'}, -+--}) - - - -- Xiaomi diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch deleted file mode 100644 index cee089f..0000000 --- a/patches/targets-ramips-mt76x8.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 -index 1ebce768..7584d372 100644 ---- a/targets/ramips-mt76x8 -+++ b/targets/ramips-mt76x8 -@@ -20,9 +20,9 @@ device('gl.inet-vixmini', 'glinet_vixmini', { - - -- Netgear - --device('netgear-r6020', 'netgear_r6020', { -- factory_ext = '.img', --}) -+--device('netgear-r6020', 'netgear_r6020', { -+-- factory_ext = '.img', -+--}) - - device('netgear-r6120', 'netgear_r6120', { - factory_ext = '.img', -@@ -80,6 +80,14 @@ device('tp-link-tl-mr3420-v5', 'tplink_tl-mr3420-v5', { - }, - }) - -+device('tp-link-tl-mr6400-v5', 'tplink_tl-mr6400-v5', { -+ factory = false, -+ extra_images = { -+ {'-squashfs-tftp-recovery', '-bootloader', '.bin'}, -+ }, -+}) -+ -+ - device('tp-link-tl-wa801nd-v5', 'tplink_tl-wa801nd-v5', { - factory = false, - extra_images = { diff --git a/patches/targets-xrx200.patch b/patches/targets-xrx200.patch deleted file mode 100644 index f6cd157..0000000 --- a/patches/targets-xrx200.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index f54cd87f..c7df2bb9 100644 ---- a/targets/lantiq-xrx200 -+++ b/targets/lantiq-xrx200 -@@ -51,20 +51,3 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { - factory = false, - aliases = {'o2-box-6431'}, - }) -- ---- TP-Link -- ---- CAVEAT: These devices don't have a dedicated WAN port. ---- All ethernet ports on the device are bridged and ---- used as WAN ports. Clients connected to these ---- ports will be connected to your private network. -- --device('tp-link-td-w8970', 'tplink_tdw8970', { -- factory = false, --}) -- --device('tp-link-td-w8980', 'tplink_tdw8980', { -- factory = false, -- aliases = {'tp-link-td-w9980'}, -- broken = true, -- 5GHz unsupported --}) From d32dc325c1b2889b6d179577d3a184421e6f0bf8 Mon Sep 17 00:00:00 2001 From: FFAC Date: Wed, 19 Jul 2023 14:06:36 +0000 Subject: [PATCH 046/129] add filogic and covr-x1860 --- patches/add-covr-x1860.patch | 1223 ++++++++++++++++++++++++++++++++++ targets | 1 + 2 files changed, 1224 insertions(+) create mode 100644 patches/add-covr-x1860.patch diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch new file mode 100644 index 0000000..985e7a7 --- /dev/null +++ b/patches/add-covr-x1860.patch @@ -0,0 +1,1223 @@ +diff --git a/patches/openwrt/0004-Add-Dlink-sge-image.patch b/patches/openwrt/0004-Add-Dlink-sge-image.patch +new file mode 100644 +index 00000000..0706ca09 +--- /dev/null ++++ b/patches/openwrt/0004-Add-Dlink-sge-image.patch +@@ -0,0 +1,893 @@ ++From: Roland <75312877+RolandoMagico@users.noreply.github.com> ++Date: Mon, 26 Jun 2023 18:03:51 +0200 ++Subject: procd: add Dlink sge image ++ ++diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch ++new file mode 100644 ++index 0000000000..71bab9b418 ++--- /dev/null +++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch ++@@ -0,0 +1,883 @@ +++diff --git a/CMakeLists.txt b/CMakeLists.txt +++index c1750d4..d7d4ed2 100644 +++--- a/CMakeLists.txt ++++++ b/CMakeLists.txt +++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "" "") +++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}") +++ FW_UTIL(dgfirmware "" "" "") +++ FW_UTIL(dgn3500sum "" "" "") ++++FW_UTIL(dlink-sge-image "" "" "${OPENSSL_CRYPTO_LIBRARIES}") +++ FW_UTIL(dns313-header "" "" "") +++ FW_UTIL(edimax_fw_header "" "" "") +++ FW_UTIL(encode_crc "" "" "") +++diff --git a/src/dlink-sge-image.c b/src/dlink-sge-image.c +++new file mode 100644 +++index 0000000..9b567f4 +++--- /dev/null ++++++ b/src/dlink-sge-image.c +++@@ -0,0 +1,510 @@ ++++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++++/* ++++ * Copyright (C) 2023 Sebastian Schaper ++++ * ++++ * This tool encrypts factory images for certain D-Link Devices ++++ * manufactured by SGE / T&W, e.g. COVR-C1200, COVR-P2500, DIR-882, ... ++++ * ++++ * Usage: ++++ * ./dlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt] ++++ * ++++ */ ++++ ++++#include "dlink-sge-image.h" ++++ ++++#include ++++#include ++++ ++++#include ++++#include ++++#include ++++#include ++++ ++++#define BUFSIZE 4096 ++++ ++++#define HEAD_MAGIC "SHRS" ++++#define HEAD_MAGIC_LEN 4 ++++#define SHA512_DIGEST_LENGTH 64 ++++#define RSA_KEY_LENGTH_BYTES 512 ++++#define AES_BLOCK_SIZE 16 ++++#define HEADER_LEN 1756 ++++ ++++unsigned char aes_iv[AES_BLOCK_SIZE]; ++++ ++++unsigned char readbuf[BUFSIZE]; ++++unsigned char encbuf[BUFSIZE]; ++++ ++++unsigned int read_bytes; ++++unsigned long read_total; ++++unsigned int i; ++++ ++++unsigned char vendor_key[AES_BLOCK_SIZE]; ++++BIO *rsa_private_bio; ++++const EVP_CIPHER *aes128; ++++EVP_CIPHER_CTX *aes_ctx; ++++ ++++FILE *input_file; ++++FILE *output_file; ++++ ++++int pass_cb(char *buf, int size, int rwflag, void *u) ++++{ ++++ char *tmp = "12345678"; ++++ size_t len = strlen(tmp); ++++ ++++ if (len > size) ++++ len = size; ++++ memcpy(buf, tmp, len); ++++ return len; ++++} ++++ ++++void image_encrypt(void) ++++{ ++++ char buf[HEADER_LEN]; ++++ const EVP_MD *sha512; ++++ EVP_MD_CTX *digest_before; ++++ EVP_MD_CTX *digest_post; ++++ EVP_MD_CTX *digest_vendor; ++++ EVP_PKEY *signing_key; ++++ EVP_PKEY_CTX *rsa_ctx; ++++ uint32_t payload_length_before, pad_len, sizebuf; ++++ unsigned char md_before[SHA512_DIGEST_LENGTH]; ++++ unsigned char md_post[SHA512_DIGEST_LENGTH]; ++++ unsigned char md_vendor[SHA512_DIGEST_LENGTH]; ++++ unsigned char sigret[RSA_KEY_LENGTH_BYTES]; ++++ size_t siglen; ++++ char footer[] = {0x00, 0x00, 0x00, 0x00, 0x30}; ++++ ++++ // seek to position 1756 (begin of AES-encrypted data), ++++ // write image headers later ++++ memset(buf, 0, HEADER_LEN); ++++ fwrite(&buf, 1, HEADER_LEN, output_file); ++++ digest_before = EVP_MD_CTX_new(); ++++ digest_post = EVP_MD_CTX_new(); ++++ digest_vendor = EVP_MD_CTX_new(); ++++ sha512 = EVP_sha512(); ++++ EVP_DigestInit_ex(digest_before, sha512, NULL); ++++ EVP_DigestInit_ex(digest_post, sha512, NULL); ++++ EVP_DigestInit_ex(digest_vendor, sha512, NULL); ++++ ++++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL); ++++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL); ++++ ++++ EVP_PKEY_sign_init(rsa_ctx); ++++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512); ++++ ++++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE); ++++ aes_ctx = EVP_CIPHER_CTX_new(); ++++ EVP_EncryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv); ++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); ++++ int outlen; ++++ ++++ while ((read_bytes = fread(&readbuf, 1, BUFSIZE, input_file)) == BUFSIZE) { ++++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes); ++++ read_total += read_bytes; ++++ ++++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], BUFSIZE); ++++ fwrite(&encbuf, 1, BUFSIZE, output_file); ++++ ++++ EVP_DigestUpdate(digest_post, &encbuf[0], BUFSIZE); ++++ } ++++ ++++ // handle last block of data (read_bytes < BUFSIZE) ++++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes); ++++ read_total += read_bytes; ++++ ++++ pad_len = AES_BLOCK_SIZE - (read_total % AES_BLOCK_SIZE); ++++ if (pad_len == 0) ++++ pad_len = AES_BLOCK_SIZE; ++++ memset(&readbuf[read_bytes], 0, pad_len); ++++ ++++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes + pad_len); ++++ EVP_CIPHER_CTX_free(aes_ctx); ++++ fwrite(&encbuf, 1, read_bytes + pad_len, output_file); ++++ ++++ EVP_DigestUpdate(digest_post, &encbuf[0], read_bytes + pad_len); ++++ ++++ fclose(input_file); ++++ payload_length_before = read_total; ++++ printf("\npayload_length_before: %li\n", read_total); ++++ ++++ // copy digest state, since we need another one with vendor key appended ++++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before); ++++ ++++ EVP_DigestFinal_ex(digest_before, &md_before[0], NULL); ++++ EVP_MD_CTX_free(digest_before); ++++ ++++ printf("\ndigest_before: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_before[i]); ++++ ++++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE); ++++ EVP_DigestFinal_ex(digest_vendor, &md_vendor[0], NULL); ++++ EVP_MD_CTX_free(digest_vendor); ++++ ++++ printf("\ndigest_vendor: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_vendor[i]); ++++ ++++ EVP_DigestFinal_ex(digest_post, &md_post[0], NULL); ++++ EVP_MD_CTX_free(digest_post); ++++ ++++ printf("\ndigest_post: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_post[i]); ++++ ++++ fwrite(&footer, 1, 5, output_file); ++++ ++++ // go back to file header and write all the digests and signatures ++++ fseek(output_file, 0, SEEK_SET); ++++ ++++ fwrite(HEAD_MAGIC, 1, HEAD_MAGIC_LEN, output_file); ++++ ++++ // write payload length before ++++ sizebuf = htonl(payload_length_before); ++++ fwrite((char *) &sizebuf, 1, 4, output_file); ++++ ++++ // write payload length post ++++ payload_length_before += pad_len; ++++ sizebuf = htonl(payload_length_before); ++++ fwrite((char *) &sizebuf, 1, 4, output_file); ++++ ++++ // write salt and digests ++++ fwrite(salt, 1, AES_BLOCK_SIZE, output_file); ++++ fwrite(&md_vendor[0], 1, SHA512_DIGEST_LENGTH, output_file); ++++ fwrite(&md_before[0], 1, SHA512_DIGEST_LENGTH, output_file); ++++ fwrite(&md_post[0], 1, SHA512_DIGEST_LENGTH, output_file); ++++ ++++ // zero-fill rsa_pub field, unused in header ++++ memset(sigret, 0, RSA_KEY_LENGTH_BYTES); ++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); ++++ ++++ // sign md_before ++++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_before[0], SHA512_DIGEST_LENGTH); ++++ printf("\nsigned before:\n"); ++++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++) ++++ printf("%02x", sigret[i]); ++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); ++++ ++++ // sign md_post ++++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_post[0], SHA512_DIGEST_LENGTH); ++++ printf("\nsigned post:\n"); ++++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++) ++++ printf("%02x", sigret[i]); ++++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); ++++ ++++ printf("\n"); ++++ ++++ fclose(output_file); ++++} ++++ ++++void image_decrypt(void) ++++{ ++++ char magic[4]; ++++ uint32_t payload_length_before, payload_length_post, pad_len; ++++ char salt[AES_BLOCK_SIZE]; ++++ char md_vendor[SHA512_DIGEST_LENGTH]; ++++ char md_before[SHA512_DIGEST_LENGTH]; ++++ char md_post[SHA512_DIGEST_LENGTH]; ++++ EVP_PKEY *signing_key; ++++ EVP_PKEY_CTX *rsa_ctx; ++++ unsigned char rsa_sign_before[RSA_KEY_LENGTH_BYTES]; ++++ unsigned char rsa_sign_post[RSA_KEY_LENGTH_BYTES]; ++++ unsigned char md_post_actual[SHA512_DIGEST_LENGTH]; ++++ unsigned char md_before_actual[SHA512_DIGEST_LENGTH]; ++++ unsigned char md_vendor_actual[SHA512_DIGEST_LENGTH]; ++++ const EVP_MD *sha512; ++++ EVP_MD_CTX *digest_before; ++++ EVP_MD_CTX *digest_post; ++++ EVP_MD_CTX *digest_vendor; ++++ ++++ printf("\ndecrypt mode\n"); ++++ ++++ if (fread(&magic, 1, HEAD_MAGIC_LEN, input_file) == 0) ++++ goto error_read; ++++ if (strncmp(magic, HEAD_MAGIC, HEAD_MAGIC_LEN) != 0) { ++++ fprintf(stderr, "Input File header magic does not match '%s'.\n" ++++ "Maybe this file is not encrypted?\n", HEAD_MAGIC); ++++ goto error; ++++ } ++++ ++++ if (fread((char *) &payload_length_before, 1, 4, input_file) == 0) ++++ goto error_read; ++++ if (fread((char *) &payload_length_post, 1, 4, input_file) == 0) ++++ goto error_read; ++++ payload_length_before = ntohl(payload_length_before); ++++ payload_length_post = ntohl(payload_length_post); ++++ ++++ if (fread(salt, 1, AES_BLOCK_SIZE, input_file) == 0) ++++ goto error_read; ++++ if (fread(md_vendor, 1, SHA512_DIGEST_LENGTH, input_file) == 0) ++++ goto error_read; ++++ if (fread(md_before, 1, SHA512_DIGEST_LENGTH, input_file) == 0) ++++ goto error_read; ++++ if (fread(md_post, 1, SHA512_DIGEST_LENGTH, input_file) == 0) ++++ goto error_read; ++++ ++++ // skip rsa_pub ++++ if (fread(readbuf, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) ++++ goto error_read; ++++ ++++ if (fread(rsa_sign_before, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) ++++ goto error_read; ++++ if (fread(rsa_sign_post, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) ++++ goto error_read; ++++ ++++ // file should be at position HEADER_LEN now, start AES decryption ++++ digest_before = EVP_MD_CTX_new(); ++++ digest_post = EVP_MD_CTX_new(); ++++ digest_vendor = EVP_MD_CTX_new(); ++++ sha512 = EVP_sha512(); ++++ EVP_DigestInit_ex(digest_before, sha512, NULL); ++++ EVP_DigestInit_ex(digest_post, sha512, NULL); ++++ EVP_DigestInit_ex(digest_vendor, sha512, NULL); ++++ ++++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE); ++++ aes_ctx = EVP_CIPHER_CTX_new(); ++++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv); ++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); ++++ int outlen; ++++ pad_len = payload_length_post - payload_length_before; ++++ ++++ while (read_total < payload_length_post) { ++++ if (read_total + BUFSIZE <= payload_length_post) ++++ read_bytes = fread(&readbuf, 1, BUFSIZE, input_file); ++++ else ++++ read_bytes = fread(&readbuf, 1, payload_length_post - read_total, \ ++++ input_file); ++++ ++++ read_total += read_bytes; ++++ ++++ EVP_DigestUpdate(digest_post, &readbuf[0], read_bytes); ++++ ++++ EVP_DecryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes); ++++ ++++ // only update digest_before until payload_length_before, ++++ // do not hash decrypted padding ++++ if (read_total > payload_length_before) { ++++ // only calc hash for data before padding ++++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes - pad_len); ++++ fwrite(&encbuf[0], 1, read_bytes - pad_len, output_file); ++++ ++++ // copy digest state, since we need another one with vendor key appended ++++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before); ++++ ++++ // append vendor_key ++++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE); ++++ } else { ++++ // calc hash for all of read_bytes ++++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes); ++++ fwrite(&encbuf[0], 1, read_bytes, output_file); ++++ } ++++ } ++++ ++++ fclose(input_file); ++++ fclose(output_file); ++++ EVP_CIPHER_CTX_free(aes_ctx); ++++ ++++ EVP_DigestFinal_ex(digest_post, &md_post_actual[0], NULL); ++++ EVP_MD_CTX_free(digest_post); ++++ ++++ printf("\ndigest_post: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_post_actual[i]); ++++ ++++ if (strncmp(md_post, (char *) md_post_actual, SHA512_DIGEST_LENGTH) != 0) { ++++ fprintf(stderr, "SHA512 post does not match file contents.\n"); ++++ goto error; ++++ } ++++ ++++ EVP_DigestFinal_ex(digest_before, &md_before_actual[0], NULL); ++++ EVP_MD_CTX_free(digest_before); ++++ ++++ printf("\ndigest_before: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_before_actual[i]); ++++ ++++ if (strncmp(md_before, (char *) md_before_actual, SHA512_DIGEST_LENGTH) != 0) { ++++ fprintf(stderr, "SHA512 before does not match decrypted payload.\n"); ++++ goto error; ++++ } ++++ ++++ EVP_DigestFinal_ex(digest_vendor, &md_vendor_actual[0], NULL); ++++ EVP_MD_CTX_free(digest_vendor); ++++ ++++ printf("\ndigest_vendor: "); ++++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) ++++ printf("%02x", md_vendor_actual[i]); ++++ ++++ if (strncmp(md_vendor, (char *) md_vendor_actual, SHA512_DIGEST_LENGTH) != 0) { ++++ fprintf(stderr, "SHA512 vendor does not match decrypted payload padded" \ ++++ " with vendor key.\n"); ++++ goto error; ++++ } ++++ ++++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL); ++++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL); ++++ EVP_PKEY_verify_init(rsa_ctx); ++++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512); ++++ ++++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_before[0], RSA_KEY_LENGTH_BYTES, \ ++++ &md_before_actual[0], SHA512_DIGEST_LENGTH)) { ++++ printf("\nsignature before verification success"); ++++ } else { ++++ fprintf(stderr, "Signature before verification failed.\nThe decrypted" \ ++++ " image file may however be flashable via bootloader recovery.\n"); ++++ } ++++ ++++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_post[0], RSA_KEY_LENGTH_BYTES, \ ++++ &md_post_actual[0], SHA512_DIGEST_LENGTH)) { ++++ printf("\nsignature post verification success"); ++++ } else { ++++ fprintf(stderr, "Signature post verification failed.\nThe decrypted" \ ++++ " image file may however be flashable via bootloader recovery.\n"); ++++ } ++++ ++++ printf("\n"); ++++ ++++ return; ++++ ++++error_read: ++++ fprintf(stderr, "Error reading header fields from input file.\n"); ++++error: ++++ fclose(input_file); ++++ fclose(output_file); ++++ exit(1); ++++} ++++ ++++/* ++++ generate legacy vendor key for COVR-C1200, COVR-P2500, DIR-882, DIR-2660, ... ++++ decrypt ciphertext key2 using aes128 with key1 and iv, write result to *vkey ++++*/ ++++void generate_vendorkey_legacy(unsigned char *vkey) ++++{ ++++ int outlen; ++++ memcpy(&aes_iv, &iv, AES_BLOCK_SIZE); ++++ aes_ctx = EVP_CIPHER_CTX_new(); ++++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &key1[0], &aes_iv[0]); ++++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); ++++ EVP_DecryptUpdate(aes_ctx, vkey, &outlen, &key2[0], AES_BLOCK_SIZE); ++++ EVP_CIPHER_CTX_free(aes_ctx); ++++} ++++ ++++/* ++++ helper function for generate_vendorkey_dimgkey() ++++ deinterleave input in chunks of 8 bytes according to pattern, ++++ last block shorter than 8 bytes is appended in reverse order ++++*/ ++++void deinterleave(unsigned char *enk, size_t len, unsigned char *vkey) ++++{ ++++ unsigned char i, pattern = 0; ++++ ++++ while (len >= INTERLEAVE_BLOCK_SIZE) ++++ { ++++ for (i = 0; i < INTERLEAVE_BLOCK_SIZE; i++) ++++ *(vkey + i) = *(enk + interleaving_pattern[pattern][i]); ++++ ++++ vkey += INTERLEAVE_BLOCK_SIZE; ++++ enk += INTERLEAVE_BLOCK_SIZE; ++++ len -= INTERLEAVE_BLOCK_SIZE; ++++ ++++ if (pattern++ >= INTERLEAVE_BLOCK_SIZE) ++++ pattern = 0; ++++ } ++++ ++++ for (i = 0; i < len; i++) ++++ *(vkey + i) = *(enk + (len - i - 1)); ++++} ++++ ++++/* ++++ generate vendor key for COVR-X1860, DIR-X3260, ... ++++ base64 decode enk, pass to deinterleave, result will be in *vkey ++++*/ ++++void generate_vendorkey_dimgkey(const unsigned char *enk, size_t len, unsigned char *vkey) ++++{ ++++ unsigned char *decode_buf = malloc(3 * (len / 4)); ++++ int outlen; ++++ EVP_ENCODE_CTX *base64_ctx = EVP_ENCODE_CTX_new(); ++++ EVP_DecodeInit(base64_ctx); ++++ EVP_DecodeUpdate(base64_ctx, decode_buf, &outlen, enk, len); ++++ EVP_DecodeFinal(base64_ctx, decode_buf + outlen, &outlen); ++++ EVP_ENCODE_CTX_free(base64_ctx); ++++ ++++ // limit deinterleaving output to first 16 bytes ++++ deinterleave(decode_buf, AES_BLOCK_SIZE, vkey); ++++} ++++ ++++int main(int argc, char **argv) ++++{ ++++ if (argc < 3 || argc > 5) { ++++ fprintf(stderr, "Usage:\n" ++++ "\tdlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]\n\n" ++++ "DEVICE_MODEL can be any of:\n" ++++ "\tCOVR-C1200\n" ++++ "\tCOVR-P2500\n" ++++ "\tCOVR-X1860\n" ++++ "\tDIR-853\n" ++++ "\tDIR-867\n" ++++ "\tDIR-878\n" ++++ "\tDIR-882\n" ++++ "\tDIR-1935\n" ++++ "\tDIR-2150\n" ++++ "\tDIR-X3260\n\n" ++++ "Any other value will default to COVR-C1200/P2500/DIR-8xx keys\n" ++++ "which may work to decrypt images for several further devices,\n" ++++ "however there are currently no private keys known that would\n" ++++ "allow for signing images to be used for flashing those devices.\n\n" ++++ ); ++++ exit(1); ++++ } ++++ ++++ input_file = fopen(argv[2], "rb"); ++++ if (input_file == NULL) { ++++ fprintf(stderr, "Input File %s could not be opened.\n", argv[2]); ++++ exit(1); ++++ } ++++ ++++ output_file = fopen(argv[3], "wb"); ++++ if (input_file == NULL) { ++++ fprintf(stderr, "Output File %s could not be opened.\n", argv[3]); ++++ fclose(input_file); ++++ exit(1); ++++ } ++++ ++++ aes128 = EVP_aes_128_cbc(); ++++ ++++ if (strncmp(argv[1], "COVR-X1860", 10) == 0) ++++ { ++++ generate_vendorkey_dimgkey(enk_covrx1860, sizeof(enk_covrx1860), &vendor_key[0]); ++++ rsa_private_bio = BIO_new_mem_buf(key_covrx1860_pem, -1); ++++ } ++++ else if (strncmp(argv[1], "DIR-X3260", 9) == 0) ++++ { ++++ generate_vendorkey_dimgkey(enk_dirx3260, sizeof(enk_dirx3260), &vendor_key[0]); ++++ rsa_private_bio = BIO_new_mem_buf(key_dirx3260_pem, -1); ++++ } ++++ else if (strncmp(argv[1], "DIR-1260", 8) == 0) ++++ { ++++ generate_vendorkey_legacy(&vendor_key[0]); ++++ rsa_private_bio = BIO_new_mem_buf(key_dir1260_pem, -1); ++++ } ++++ else if (strncmp(argv[1], "DIR-2150", 8) == 0) ++++ { ++++ generate_vendorkey_legacy(&vendor_key[0]); ++++ rsa_private_bio = BIO_new_mem_buf(key_dir2150_pem, -1); ++++ } ++++ else ++++ { ++++ /* COVR-C1200, COVR-P2500, DIR-853, DIR-867, DIR-878, DIR-882, DIR-1935 */ ++++ generate_vendorkey_legacy(&vendor_key[0]); ++++ rsa_private_bio = BIO_new_mem_buf(key_legacy_pem, -1); ++++ } ++++ ++++ printf("\nvendor_key: "); ++++ for (i = 0; i < AES_BLOCK_SIZE; i++) ++++ printf("%02x", vendor_key[i]); ++++ ++++ if (argc == 5 && strncmp(argv[4], "-d", 2) == 0) ++++ image_decrypt(); ++++ else ++++ image_encrypt(); ++++} +++diff --git a/src/dlink-sge-image.h b/src/dlink-sge-image.h +++new file mode 100644 +++index 0000000..8966cc9 +++--- /dev/null ++++++ b/src/dlink-sge-image.h +++@@ -0,0 +1,349 @@ ++++/* SPDX-License-Identifier: GPL-2.0-only */ ++++ ++++const unsigned char key1[] = ++++ "\x35\x87\x90\x03\x45\x19\xf8\xc8\x23\x5d\xb6\x49\x28\x39\xa7\x3f"; ++++ ++++const unsigned char key2[] = ++++ "\xc8\xd3\x2f\x40\x9c\xac\xb3\x47\xc8\xd2\x6f\xdc\xb9\x09\x0b\x3c"; ++++ ++++const unsigned char iv[] = ++++ "\x98\xc9\xd8\xf0\x13\x3d\x06\x95\xe2\xa7\x09\xc8\xb6\x96\x82\xd4"; ++++ ++++const unsigned char salt[] = ++++ "\x67\xc6\x69\x73\x51\xff\x4a\xec\x29\xcd\xba\xab\xf2\xfb\xe3\x46"; ++++ ++++/* ++++ enk.txt as found in GPL tarball: ++++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/enk.txt ++++*/ ++++const unsigned char enk_covrx1860[] = ++++ "NE1oIS1lKzkkIzZkbX49KTMsMWFkJXEybjheJiN6KjIwNjgx"; ++++ ++++/* ++++ enk.txt as found in GPL tarball: ++++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/enk.txt ++++*/ ++++const unsigned char enk_dirx3260[] = ++++ "NF5yKy10JTl+bSkhNj1kTTIkI3FhIyUsJDU0czMyZmR6Jl4jMzI4KjA2Mg=="; ++++ ++++#define INTERLEAVE_BLOCK_SIZE 8 ++++const unsigned char interleaving_pattern[INTERLEAVE_BLOCK_SIZE][INTERLEAVE_BLOCK_SIZE] = { ++++ {2, 5, 7, 4, 0, 6, 1, 3}, ++++ {7, 3, 2, 6, 4, 5, 1, 0}, ++++ {5, 1, 6, 7, 3, 0, 4, 2}, ++++ {0, 3, 7, 6, 5, 4, 2, 1}, ++++ {1, 5, 7, 0, 3, 2, 6, 4}, ++++ {3, 6, 2, 5, 4, 7, 1, 0}, ++++ {6, 0, 5, 1, 3, 4, 2, 7}, ++++ {4, 6, 7, 3, 2, 0, 1, 5} ++++}; ++++ ++++/* ++++ key.pem as found in GPL tarball, e.g.: ++++ COVRP2500A1_FW101/COVRP2500_GPL_Release/package/tw-prog.priv/imgcrypt/key.pem ++++ encrypted with passphrase: "12345678" ++++*/ ++++const unsigned char key_legacy_pem[] = R"( ++++-----BEGIN RSA PRIVATE KEY----- ++++Proc-Type: 4,ENCRYPTED ++++DEK-Info: AES-256-CBC,EAA1FD02CDBC7AA7E62AC821D47823F2 ++++ ++++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 ++++-----END RSA PRIVATE KEY----- ++++)"; ++++ ++++/* ++++ key.pem as found in GPL tarball: ++++ DIR1260_GPL_Release/vendors/DIR-1260/imgkey/key.pem ++++ encrypted with passphrase: "12345678" ++++*/ ++++const unsigned char key_dir1260_pem[] = R"( ++++-----BEGIN RSA PRIVATE KEY----- ++++Proc-Type: 4,ENCRYPTED ++++DEK-Info: AES-256-CBC,FFC890207BA9F13F6CE13F8EF7E69802 ++++ ++++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 ++++-----END RSA PRIVATE KEY----- ++++)"; ++++ ++++/* ++++ key.pem as found in GPL tarball: ++++ DIR2150_GPL_Release/vendors/DIR-2150/imgkey/key.pem ++++ encrypted with passphrase: "12345678" ++++*/ ++++const unsigned char key_dir2150_pem[] = R"( ++++-----BEGIN RSA PRIVATE KEY----- ++++Proc-Type: 4,ENCRYPTED ++++DEK-Info: AES-256-CBC,314D3C7FB69E7DDEAF084A0A7CA39069 ++++ ++++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 ++++-----END RSA PRIVATE KEY----- ++++)"; ++++ ++++/* ++++ key.pem as found in GPL tarball: ++++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/key.pem ++++ encrypted with passphrase: "12345678" ++++*/ ++++const unsigned char key_covrx1860_pem[] = R"( ++++-----BEGIN RSA PRIVATE KEY----- ++++Proc-Type: 4,ENCRYPTED ++++DEK-Info: AES-256-CBC,34CCF1AEF0C34EAC5FFAE6BCF81ABB8D ++++ ++++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 ++++-----END RSA PRIVATE KEY----- ++++)"; ++++ ++++/* ++++ key.pem as found in GPL tarball, e.g.: ++++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/key.pem ++++ encrypted with passphrase: "12345678" ++++*/ ++++const unsigned char key_dirx3260_pem[] = R"( ++++-----BEGIN RSA PRIVATE KEY----- ++++Proc-Type: 4,ENCRYPTED ++++DEK-Info: AES-256-CBC,DDAC1FE060CB240242046BDFEEE17E44 ++++ ++++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 ++++-----END RSA PRIVATE KEY----- ++++)"; +diff --git a/patches/openwrt/0005-Add-DLink-COVR-X1860.patch b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch +new file mode 100644 +index 00000000..aa9f2245 +--- /dev/null ++++ b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch +@@ -0,0 +1,318 @@ ++From: Roland <75312877+RolandoMagico@users.noreply.github.com> ++Date: Mon, 26 Jun 2023 18:03:51 +0200 ++Subject: add Dlink COVR-X1860 ++diff --git a/include/image-commands.mk b/include/image-commands.mk ++index 9220b8dec0..84032d338c 100644 ++--- a/include/image-commands.mk +++++ b/include/image-commands.mk ++@@ -226,6 +226,11 @@ define Build/copy-file ++ cat "$(1)" > "$@" ++ endef ++ +++define Build/dlink-sge-image +++ $(STAGING_DIR_HOST)/bin/dlink-sge-image $(1) $@ $@.enc +++ mv $@.enc $@ +++endef +++ ++ define Build/edimax-header ++ $(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1) ++ @mv $@.new $@ ++diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts ++new file mode 100644 ++index 0000000000..c06c5e36ba ++--- /dev/null +++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts ++@@ -0,0 +1,186 @@ +++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +++ +++#include "mt7621.dtsi" +++ +++#include +++#include +++ +++/ { +++ compatible = "dlink,covr-x1860-a1", "mediatek,mt7621-soc"; +++ model = "D-Link COVR-X1860 A1"; +++ +++ aliases { +++ led-boot = &status_orange; +++ led-failsafe = &status_red; +++ led-running = &status_white; +++ led-upgrade = &status_red; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyS0,115200"; +++ }; +++ +++ keys { +++ compatible = "gpio-keys"; +++ +++ reset { +++ label = "reset"; +++ linux,code = ; +++ gpios = <&gpio 15 GPIO_ACTIVE_LOW>; +++ }; +++ +++ wps { +++ label = "wps"; +++ linux,code = ; +++ gpios = <&gpio 8 GPIO_ACTIVE_LOW>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ +++ status_white: power { +++ label = "white:status"; +++ gpios = <&gpio 16 GPIO_ACTIVE_LOW>; +++ }; +++ +++ status_orange: status_orange { +++ label = "orange:status"; +++ gpios = <&gpio 13 GPIO_ACTIVE_LOW>; +++ default-state = "on"; +++ }; +++ +++ status_red: status_red { +++ label = "red:status"; +++ gpios = <&gpio 14 GPIO_ACTIVE_LOW>; +++ }; +++ }; +++ +++ virtual_flash { +++ compatible = "mtd-concat"; +++ +++ devices = <&fwconcat0 &fwconcat1>; +++ +++ partitions { +++ compatible = "fixed-partitions"; +++ #address-cells = <1>; +++ #size-cells = <1>; +++ +++ partition@0 { +++ label = "ubi"; +++ reg = <0x0 0x0>; +++ }; +++ }; +++ }; +++}; +++ +++&nand { +++ status = "okay"; +++ +++ partitions { +++ compatible = "fixed-partitions"; +++ #address-cells = <1>; +++ #size-cells = <1>; +++ +++ partition@0 { +++ label = "bootloader"; +++ reg = <0x0 0x80000>; +++ read-only; +++ }; +++ +++ partition@80000 { +++ label = "config"; +++ reg = <0x80000 0x80000>; +++ read-only; +++ }; +++ +++ factory: partition@100000 { +++ label = "factory"; +++ reg = <0x100000 0x80000>; +++ read-only; +++ }; +++ +++ partition@180000 { +++ label = "config2"; +++ reg = <0x180000 0x40000>; +++ read-only; +++ }; +++ +++ partition@1c0000 { +++ label = "kernel"; +++ reg = <0x1c0000 0x800000>; +++ }; +++ +++ fwconcat0: partition@9c0000 { +++ label = "fwconcat0"; +++ reg = <0x9c0000 0x2000000>; +++ }; +++ +++ partition@29c0000 { +++ label = "kernel2"; +++ reg = <0x29c0000 0x800000>; +++ read-only; +++ }; +++ +++ fwconcat1: partition@31c0000 { +++ label = "fwconcat1"; +++ reg = <0x31c0000 0x2a00000>; +++ }; +++ +++ partition@5bc0000 { +++ label = "private"; +++ reg = <0x5bc0000 0x1400000>; +++ read-only; +++ }; +++ +++ partition@6fc0000 { +++ label = "mydlink"; +++ reg = <0x6fc0000 0x600000>; +++ read-only; +++ }; +++ +++ partition@75c0000 { +++ label = "myconfig"; +++ reg = <0x75c0000 0xa00000>; +++ read-only; +++ }; +++ }; +++}; +++ +++&pcie { +++ status = "okay"; +++}; +++ +++&pcie1 { +++ wifi@0,0 { +++ compatible = "mediatek,mt76"; +++ reg = <0x0000 0 0 0 0>; +++ mediatek,mtd-eeprom = <&factory 0x0>; +++ mediatek,disable-radar-background; +++ }; +++}; +++ +++&gmac1 { +++ status = "okay"; +++ phy-handle = <ðphy4>; +++}; +++ +++&mdio { +++ ethphy4: ethernet-phy@4 { +++ reg = <4>; +++ }; +++}; +++ +++&switch0 { +++ ports { +++ port@0 { +++ status = "okay"; +++ label = "internet"; +++ }; +++ +++ port@2 { +++ status = "okay"; +++ label = "ethernet"; +++ }; +++ }; +++}; ++diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk ++index a5b69839a7..7b43410a5a 100644 ++--- a/target/linux/ramips/image/mt7621.mk +++++ b/target/linux/ramips/image/mt7621.mk ++@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621 ++ ++ DEVICE_VARS += ELECOM_HWNAME LINKSYS_HWNAME DLINK_HWID ++ +++define Build/append-dlink-covr-metadata +++ echo -ne '{"supported_devices": "$(1)", "firmware": "' > $@metadata.tmp +++ $(MKHASH) md5 "$@" | head -c32 >> $@metadata.tmp +++ echo '"}' >> $@metadata.tmp +++ fwtool -I $@metadata.tmp $@ +++ rm $@metadata.tmp +++endef +++ ++ define Build/arcadyan-trx ++ echo -ne "hsqs" > $@.hsqs ++ $(eval trx_magic=$(word 1,$(1))) ++@@ -552,6 +560,31 @@ define Device/cudy_x6-v2 ++ endef ++ TARGET_DEVICES += cudy_x6-v2 ++ +++define Device/dlink_covr-x1860-a1 +++ $(Device/dsa-migration) +++ BLOCKSIZE := 128k +++ PAGESIZE := 2048 +++ KERNEL_SIZE := 8192k +++ IMAGE_SIZE := 40960k +++ DEVICE_VENDOR := D-Link +++ DEVICE_MODEL := COVR-X1860 +++ DEVICE_VARIANT := A1 +++ DEVICE_PACKAGES := kmod-mt7915-firmware +++ UBINIZE_OPTS := -E 5 +++ KERNEL_LOADADDR := 0x82000000 +++ KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \ +++ fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | \ +++ append-squashfs4-fakeroot +++ IMAGES += factory.bin recovery.bin +++ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata +++ IMAGE/recovery.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \ +++ append-ubi | check-size +++ IMAGE/factory.bin := $$(IMAGE/recovery.bin) | \ +++ append-dlink-covr-metadata $$(DEVICE_MODEL) | \ +++ dlink-sge-image $$(DEVICE_MODEL) +++endef +++TARGET_DEVICES += dlink_covr-x1860-a1 +++ ++ define Device/dlink_dap-1620-b1 ++ DEVICE_VENDOR := D-Link ++ DEVICE_MODEL := DAP-1620 ++diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network ++index cd746e84ee..a772bca6d1 100644 ++--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network +++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network ++@@ -91,6 +91,9 @@ ramips_setup_interfaces() ++ zyxel,nt7101) ++ ucidef_set_interfaces_lan_wan "lan" "wan" ++ ;; +++ dlink,covr-x1860-a1) +++ ucidef_set_interfaces_lan_wan "ethernet" "internet" +++ ;; ++ gnubee,gb-pc1) ++ ucidef_set_interface_lan "ethblack ethblue" ++ ;; ++@@ -185,6 +188,11 @@ ramips_setup_macs() ++ lan_mac=$wan_mac ++ label_mac=$wan_mac ++ ;; +++ dlink,covr-x1860-a1) +++ label_mac=$(mtd_get_mac_ascii config2 factory_mac) +++ wan_mac=$label_mac +++ lan_mac=$label_mac +++ ;; ++ dlink,dir-860l-b1) ++ lan_mac=$(mtd_get_mac_ascii factory lanmac) ++ wan_mac=$(mtd_get_mac_ascii factory wanmac) ++diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac ++index 80c7273543..10e055d776 100644 ++--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac ++@@ -41,6 +41,13 @@ case "$board" in ++ [ "$PHYNBR" = "1" ] && \ ++ macaddr_add $lan_mac_addr 2 > /sys${DEVPATH}/macaddress ++ ;; +++ dlink,covr-x1860-a1) +++ label_mac=$(mtd_get_mac_ascii config2 factory_mac) +++ [ "$PHYNBR" = "0" ] && \ +++ macaddr_add $label_mac 1 > /sys${DEVPATH}/macaddress +++ [ "$PHYNBR" = "1" ] && \ +++ macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress +++ ;; ++ dlink,dap-x1860-a1) ++ hw_mac_addr="$(mtd_get_mac_binary factory 0x4)" ++ [ "$PHYNBR" = "0" ] && \ ++diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh ++index ce5fdd61ed..0dbd7874e8 100755 ++--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh +++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh ++@@ -61,6 +61,7 @@ platform_do_upgrade() { ++ beeline,smartbox-giga|\ ++ beeline,smartbox-turbo|\ ++ belkin,rt1800|\ +++ dlink,covr-x1860-a1|\ ++ dlink,dap-x1860-a1|\ ++ dlink,dir-1960-a1|\ ++ dlink,dir-2640-a1|\ diff --git a/targets b/targets index 29a74e7..190c036 100644 --- a/targets +++ b/targets @@ -9,6 +9,7 @@ ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 +mediatek-filogic mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 From 4491d4229f216618831d9db438c1b5393bfeda2e Mon Sep 17 00:00:00 2001 From: FFAC Date: Fri, 21 Jul 2023 17:03:08 +0000 Subject: [PATCH 047/129] add recovery and factory for covr-x1860 --- patches/add-covr-x1860.patch | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index 985e7a7..1dba5a8 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -1221,3 +1221,20 @@ index 00000000..aa9f2245 + dlink,dap-x1860-a1|\ + dlink,dir-1960-a1|\ + dlink,dir-2640-a1|\ +diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 +index b0dabd4c..013a06a4 100644 +--- a/targets/ramips-mt7621 ++++ b/targets/ramips-mt7621 +@@ -40,6 +40,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { + + -- D-Link + ++device('d-link-covr-x1860-a1', 'dlink_covr-x1860-a1', { ++ extra_images = { ++ {'-squashfs-recovery', '-recovery', '.bin'} ++ }, ++}) ++ + device('d-link-dap-x1860-a1', 'dlink_dap-x1860-a1') + + device('d-link-dir-860l-b1', 'dlink_dir-860l-b1') From 853593a925d02e466c5e3386f0c1e70235b22492 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 04:40:54 +0200 Subject: [PATCH 048/129] site.conf: move comments around, fix indentation remove show_altitude, it's default false anyways remove community-build mirror (experimental channel) --- site.conf | 56 +++++++++++++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/site.conf b/site.conf index b93d7af..0812fdd 100644 --- a/site.conf +++ b/site.conf @@ -22,7 +22,7 @@ --[[ NTP settings - Synchronize the time of the nodes + Synchronize the time of the nodes timezone: Timezone of your community http://wiki.openwrt.org/doc/uci/system#time.zones ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community. @@ -259,7 +259,6 @@ 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade', 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade', 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade', - 'http://community-build.freifunk-aachen.de/firmware/from-2022.1.x/experimental/sysupgrade', }, good_signatures = 2, pubkeys = { @@ -277,7 +276,19 @@ }, }, - -- Show/hide the altitude field + -- uncomment for update from 2019.1.x to v2021.1.x + --[[ update_channel = { + from_name = experimental, -- remove or false to catch all + -- if to_name is defined, autoupdater branch is set to it + to_name = 'beta', + } + ]] + + --[[ setup_mode = { + skip = false, -- Skip config_mode on first boot + }, + ]] + config_mode = { hostname = { optional = false, @@ -286,14 +297,10 @@ show_password_form = true, min_password_length = 10, }, - geo_location = { - show_altitude = false, - }, owner = { obligatory = true, }, geo_location = { - show_altitude = false, osm = { center = { lat = 50.77, @@ -309,33 +316,20 @@ }, }, - --[[ setup_mode = { - skip = false, - }, - authorized_keys = { '', }, - ]] - ssid_changer = { enabled = true, - switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE - -- set to 1440 to change once a day - -- set to 1 minute to change every time the router gets offline - first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated - prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!) - suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none' - tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable - -- upper and lower limit to turn the offline_ssid on and off - -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute. - tq_limit_max = 55, -- upper limit, above that the online SSID will be used - tq_limit_min = 45, -- lower limit, below that the offline SSID will be used + switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE + -- set to 1440 to change once a day + -- set to 1 minute to change every time the router gets offline + first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated + prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!) + suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none' + tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable + -- upper and lower limit to turn the offline_ssid on and off + -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute. + tq_limit_max = 55, -- upper limit, above that the online SSID will be used + tq_limit_min = 45, -- lower limit, below that the offline SSID will be used }, - - update_channel = { - --from_name = false, -- remove or false to catch all - -- if to_name is defined, autoupdater branch is set to it - to_name = 'stable', - - } } -- /* vi: set ft=lua: */ From e1ed391d7a8b4a33154b2906a55399c817ff5ee0 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 04:43:53 +0200 Subject: [PATCH 049/129] site.conf: add new signing key: build server --- site.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site.conf b/site.conf index 0812fdd..6732fa4 100644 --- a/site.conf +++ b/site.conf @@ -222,7 +222,7 @@ }, good_signatures = 4, pubkeys = { - 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk) + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty @@ -242,7 +242,7 @@ }, good_signatures = 3, pubkeys = { - 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk) + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty @@ -262,7 +262,7 @@ }, good_signatures = 2, pubkeys = { - 'e1505aadd3c5674a93ff2c8596b2cb2d857b068b18f9a398a182b003a5e5040b', -- Bob (Build Server @skydisk) + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty From 40a05329c676c424447608acdda16fc32bdca12f Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 04:44:56 +0200 Subject: [PATCH 050/129] site.conf: remove weather radar channels from outdoor_chanlist --- site.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site.conf b/site.conf index 6732fa4..4873028 100644 --- a/site.conf +++ b/site.conf @@ -55,7 +55,8 @@ wifi5 = { channel = 44, - outdoor_chanlist = "100-140", + outdoor_chanlist = '100-116 132-140', -- exclude/avoid weather radar frequencies + -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html ap = { ssid = 'Freifunk', }, From 9c352cfff3d29ed9d9f747007a8356ecf63388fc Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:02:19 +0200 Subject: [PATCH 051/129] site.mk: rework packagelist variables sort packages alphabetically add code comment --- site.mk | 75 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/site.mk b/site.mk index 6f6c063..860b14d 100644 --- a/site.mk +++ b/site.mk @@ -1,41 +1,48 @@ ## gluon site.mk Freifunk Regio Aachen GLUON_DEPRECATED=upgrade -GLUON_FEATURES := \ - autoupdater \ - config-mode-geo-location-osm \ - ebtables-filter-multicast \ - ebtables-filter-ra-dhcp \ - ebtables-limit-arp \ - mesh-batman-adv-15 \ - mesh-vpn-wireguard \ - radv-filterd \ - radvd \ - respondd \ - status-page \ - web-advanced \ - web-private-wifi \ - web-wizard -## GLUON_SITE_PACKAGES -# Specify additional Gluon/LEDE packages to include here; -# A minus sign may be prepended to remove a packages from the -# selection that would be enabled by default or due to the -# chosen feature flags - - -# -gluon-status-page -#ffac-status-page -# custom status page without contact information - -GLUON_SITE_PACKAGES := \ - iwinfo \ - ffac-ssid-changer \ - ffac-autoupdater-wifi-fallback \ - ffac-wg-registration \ - respondd-module-airtime - +## GLUON_FEATURES +# Specify Gluon features/packages to enable; +# Gluon will automatically enable a set of packages +# depending on the combination of features listed +define GLUON_FEATURES := +autoupdater +config-mode-geo-location-osm +ebtables-filter-multicast +ebtables-filter-ra-dhcp +ebtables-limit-arp +mesh-batman-adv-15 +mesh-vpn-wireguard +radv-filterd +radvd +respondd +status-page +web-advanced +web-private-wifi +web-wizard +endef +GLUON_FEATURES := $(GLUON_FEATURES:\n= ) + +## GLUON_SITE_PACKAGES +# Specify additional Gluon/OpenWrt packages to include here; +# A minus sign may be prepended to remove a packages from the +# selection that would be enabled by default or due to the +# chosen feature flags +define GLUON_SITE_PACKAGES := +ffac-autoupdater-wifi-fallback +ffac-ssid-changer +ffac-wg-registration +iwinfo +respondd-module-airtime +endef +GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= ) + +define GLUON_FEATURES_standard := + +endef +# wireless-encryption-wpa3 # gluon-mesh-wireless-sae -# GLUON_FEATURES_standard := wireless-encryption-wpa3 +GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H') From 0144c42c4887ee05bb91c4eae74b52b28f63b5ba Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:18:42 +0200 Subject: [PATCH 052/129] site.mk: add code comments from example --- site.mk | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/site.mk b/site.mk index 860b14d..cca787b 100644 --- a/site.mk +++ b/site.mk @@ -23,6 +23,13 @@ web-wizard endef GLUON_FEATURES := $(GLUON_FEATURES:\n= ) +define GLUON_FEATURES_standard := + +endef +# wireless-encryption-wpa3 +# gluon-mesh-wireless-sae +GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) + ## GLUON_SITE_PACKAGES # Specify additional Gluon/OpenWrt packages to include here; # A minus sign may be prepended to remove a packages from the @@ -37,13 +44,6 @@ respondd-module-airtime endef GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= ) -define GLUON_FEATURES_standard := - -endef -# wireless-encryption-wpa3 -# gluon-mesh-wireless-sae -GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) - DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H') # Allow overriding the release number from the command line @@ -53,8 +53,10 @@ DEFAULT_GLUON_CHECKOUT := v2022.1.4 GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT) +# Default priority for updates. GLUON_PRIORITY ?= 0 +# Region code required for some images; supported values: us eu GLUON_REGION ?= eu # Languages to include From 2abb1097c45042a57d744f1e9773f3fd12104c91 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:23:54 +0200 Subject: [PATCH 053/129] site.mk: add web-cellular but commented out --- site.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/site.mk b/site.mk index cca787b..e175c49 100644 --- a/site.mk +++ b/site.mk @@ -26,6 +26,7 @@ GLUON_FEATURES := $(GLUON_FEATURES:\n= ) define GLUON_FEATURES_standard := endef +# web-cellular # wireless-encryption-wpa3 # gluon-mesh-wireless-sae GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) From f1f9bf987fa0beb2a6027f29a1536316ab417443 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:27:05 +0200 Subject: [PATCH 054/129] site.mk: move some stuff from Makefile to site.mk remove Release and Checkout stuff from site.mk set BROKEN in site.mk set GLUON_AUTOUPDATER_ENABLED in site.mk set GLUON_OUTPUTDIR in site.mk set GLUON_PACKAGEDIR in site.mk move GLUON_DEPRECATED further down in the file --- .gitignore | 1 + site.mk | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index fa8ed78..66f2fc8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ gluon-build +output *.orig *.swp diff --git a/site.mk b/site.mk index e175c49..aec6860 100644 --- a/site.mk +++ b/site.mk @@ -45,18 +45,23 @@ respondd-module-airtime endef GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= ) -DEFAULT_GLUON_RELEASE := 2022.1.4-1~exp$(shell date '+%Y%m%d%H') - -# Allow overriding the release number from the command line -GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) - -DEFAULT_GLUON_CHECKOUT := v2022.1.4 +# Build everything by default +ifeq ($(BROKEN),0) + override BROKEN := +else + BROKEN := 1 +endif +GLUON_DEPRECATED := upgrade -GLUON_CHECKOUT ?= $(DEFAULT_GLUON_CHECKOUT) +GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output +GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules # Default priority for updates. GLUON_PRIORITY ?= 0 +# Autoupdate by default +GLUON_AUTOUPDATER_ENABLED ?= 1 + # Region code required for some images; supported values: us eu GLUON_REGION ?= eu From 716240197454b4fcfd12e6573474e0f90a4ccbc9 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:59:08 +0200 Subject: [PATCH 055/129] Makefile: Update to new FFMUC changes create ${GLUON_BUILD_DIR} and fill it without git clone split first half of gluon-prepare and create gluon-update we will keep our own gluon-patch for now instead of running their shell script scripts/apply_patches.sh --- Makefile | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 19b3969..bbae060 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ info: @echo '# Building release ${GLUON_RELEASE} for branch ${GLUON_AUTOUPDATER_BRANCH}' @echo -build: gluon-prepare +build: gluon-prepare output-clean cp OPKG_KEY_BUILD_DIR/* ${GLUON_BUILD_DIR}/openwrt || true for target in ${GLUON_TARGETS}; do \ echo ""Building target $$target""; \ @@ -56,17 +56,22 @@ sign: manifest ${GLUON_BUILD_DIR}/contrib/sign.sh ${SECRET_KEY_FILE} output/images/sysupgrade/${GLUON_AUTOUPDATER_BRANCH}.manifest ${GLUON_BUILD_DIR}: - git clone ${GLUON_GIT_URL} ${GLUON_BUILD_DIR} - -gluon-prepare: output-clean ${GLUON_BUILD_DIR} - cd ${GLUON_BUILD_DIR} \ - && git remote set-url origin ${GLUON_GIT_URL} \ - && git fetch --tags origin ${GLUON_GIT_REF} \ - && rm -rf packages \ - && git checkout -q --force ${GLUON_GIT_REF} \ - && git clean -fd; - ln -sfT .. ${GLUON_BUILD_DIR}/site + mkdir -p ${GLUON_BUILD_DIR} + +# Note: "|" means "order only", e.g. "do not care about folder timestamps" +# https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html +${GLUON_BUILD_DIR}/.git: | ${GLUON_BUILD_DIR} + git init ${GLUON_BUILD_DIR} + cd ${GLUON_BUILD_DIR} && git remote add origin ${GLUON_GIT_URL} + +gluon-update: | ${GLUON_BUILD_DIR}/.git + cd ${GLUON_BUILD_DIR} && git fetch --tags origin ${GLUON_GIT_REF} + cd ${GLUON_BUILD_DIR} && git reset --hard FETCH_HEAD + cd ${GLUON_BUILD_DIR} && git clean -fd + +gluon-prepare: gluon-update make gluon-patch + ln -sfT .. ${GLUON_BUILD_DIR}/site ${GLUON_MAKE} update gluon-patch: From ab601bcce70abb632f92aa31977102d9d123f80c Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:30:52 +0200 Subject: [PATCH 056/129] Makefile: replace {} by () --- Makefile | 68 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index bbae060..88b14e2 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,9 @@ GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git GLUON_GIT_REF := v2022.1.4 -PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches -SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key -OPKG_KEY_BUILD_DIR ?= ${HOME}/.key-build +PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches +SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key +OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') GLUON_AUTOUPDATER_BRANCH := stable @@ -21,79 +21,79 @@ endif JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l) -GLUON_MAKE := ${MAKE} -j ${JOBS} --no-print-directory -C ${GLUON_BUILD_DIR} \ +GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \ BROKEN=1 \ - GLUON_RELEASE=${GLUON_RELEASE} \ - GLUON_AUTOUPDATER_BRANCH=${GLUON_AUTOUPDATER_BRANCH} \ - GLUON_AUTOUPDATER_ENABLED=${GLUON_AUTOUPDATER_ENABLED} + GLUON_RELEASE=$(GLUON_RELEASE) \ + GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \ + GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED) all: info - ${MAKE} manifest + $(MAKE) manifest info: @echo @echo '#########################' @echo '# FFAC Firmware build' - @echo '# Building release ${GLUON_RELEASE} for branch ${GLUON_AUTOUPDATER_BRANCH}' + @echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)' @echo build: gluon-prepare output-clean - cp OPKG_KEY_BUILD_DIR/* ${GLUON_BUILD_DIR}/openwrt || true - for target in ${GLUON_TARGETS}; do \ + cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true + for target in $(GLUON_TARGETS); do \ echo ""Building target $$target""; \ - ${GLUON_MAKE} download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \ + $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \ done - mkdir -p ${GLUON_BUILD_DIR}/output/opkg-packages - cp -r ${GLUON_BUILD_DIR}/openwrt/bin/packages ${GLUON_BUILD_DIR}/output/opkg-packages/gluon-ffac-${GLUON_RELEASE}/ + mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages + cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ manifest: build for branch in experimental beta stable; do \ - ${GLUON_MAKE} manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ + $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ done - mv -f ${GLUON_BUILD_DIR}/output/* ./output/ + mv -f $(GLUON_BUILD_DIR)/output/* ./output/ sign: manifest - ${GLUON_BUILD_DIR}/contrib/sign.sh ${SECRET_KEY_FILE} output/images/sysupgrade/${GLUON_AUTOUPDATER_BRANCH}.manifest + $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest -${GLUON_BUILD_DIR}: - mkdir -p ${GLUON_BUILD_DIR} +$(GLUON_BUILD_DIR): + mkdir -p $(GLUON_BUILD_DIR) # Note: "|" means "order only", e.g. "do not care about folder timestamps" # https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html -${GLUON_BUILD_DIR}/.git: | ${GLUON_BUILD_DIR} - git init ${GLUON_BUILD_DIR} - cd ${GLUON_BUILD_DIR} && git remote add origin ${GLUON_GIT_URL} +$(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR) + git init $(GLUON_BUILD_DIR) + cd $(GLUON_BUILD_DIR) && git remote add origin $(GLUON_GIT_URL) -gluon-update: | ${GLUON_BUILD_DIR}/.git - cd ${GLUON_BUILD_DIR} && git fetch --tags origin ${GLUON_GIT_REF} - cd ${GLUON_BUILD_DIR} && git reset --hard FETCH_HEAD - cd ${GLUON_BUILD_DIR} && git clean -fd +gluon-update: | $(GLUON_BUILD_DIR)/.git + cd $(GLUON_BUILD_DIR) && git fetch --tags origin $(GLUON_GIT_REF) + cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD + cd $(GLUON_BUILD_DIR) && git clean -fd gluon-prepare: gluon-update make gluon-patch - ln -sfT .. ${GLUON_BUILD_DIR}/site - ${GLUON_MAKE} update + ln -sfT .. $(GLUON_BUILD_DIR)/site + $(GLUON_MAKE) update gluon-patch: echo "Applying Patches ..." - (cd ${GLUON_BUILD_DIR}) + (cd $(GLUON_BUILD_DIR)) if [ `git branch --list patched` ]; then \ (git branch -D patched) \ fi - (cd ${GLUON_BUILD_DIR}; git checkout -B patching) + (cd $(GLUON_BUILD_DIR); git checkout -B patching) if [ -d "gluon-build/site/patches" -a "gluon-build/site/patches/*.patch" ]; then \ - (cd ${GLUON_BUILD_DIR}; git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \ - cd ${GLUON_BUILD_DIR}; \ + (cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \ + cd $(GLUON_BUILD_DIR); \ git clean -fd; \ git checkout -B patched; \ git branch -D patching; \ exit 1 \ ) \ fi - (cd ${GLUON_BUILD_DIR}; git branch -M patched) + (cd $(GLUON_BUILD_DIR); git branch -M patched) gluon-clean: - rm -rf ${GLUON_BUILD_DIR} + rm -rf $(GLUON_BUILD_DIR) output-clean: mkdir -p output/ From c8e177de4172be0701a30e5fc4f461f74871d69c Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 05:36:09 +0200 Subject: [PATCH 057/129] Makefile: resort sections sort targets more chronologically presort variables for later commits --- Makefile | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 88b14e2..3e62499 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ -GLUON_BUILD_DIR := gluon-build GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git GLUON_GIT_REF := v2022.1.4 +GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') +GLUON_BUILD_DIR := gluon-build PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build -GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') GLUON_AUTOUPDATER_BRANCH := stable ifneq (,$(shell git describe --exact-match --tags 2>/dev/null)) @@ -27,9 +27,6 @@ GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \ GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \ GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED) -all: info - $(MAKE) manifest - info: @echo @echo '#########################' @@ -37,24 +34,6 @@ info: @echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)' @echo -build: gluon-prepare output-clean - cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true - for target in $(GLUON_TARGETS); do \ - echo ""Building target $$target""; \ - $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \ - done - mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages - cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ - -manifest: build - for branch in experimental beta stable; do \ - $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ - done - mv -f $(GLUON_BUILD_DIR)/output/* ./output/ - -sign: manifest - $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest - $(GLUON_BUILD_DIR): mkdir -p $(GLUON_BUILD_DIR) @@ -69,6 +48,27 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD cd $(GLUON_BUILD_DIR) && git clean -fd +all: info + $(MAKE) manifest + +sign: manifest + $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest + +manifest: build + for branch in experimental beta stable; do \ + $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ + done + mv -f $(GLUON_BUILD_DIR)/output/* ./output/ + +build: gluon-prepare output-clean + cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true + for target in $(GLUON_TARGETS); do \ + echo ""Building target $$target""; \ + $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \ + done + mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages + cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ + gluon-prepare: gluon-update make gluon-patch ln -sfT .. $(GLUON_BUILD_DIR)/site From 1e43d340eceeab421f8ae52760980091b5826f1e Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:06:31 +0200 Subject: [PATCH 058/129] Makefile: replace " by ' --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 3e62499..d87a004 100644 --- a/Makefile +++ b/Makefile @@ -63,8 +63,8 @@ manifest: build build: gluon-prepare output-clean cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true for target in $(GLUON_TARGETS); do \ - echo ""Building target $$target""; \ - $(GLUON_MAKE) download all GLUON_TARGET="$$target" CONFIG_JSON_ADD_IMAGE_INFO=1; \ + echo ''Building target $$target''; \ + $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ done mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ @@ -75,13 +75,13 @@ gluon-prepare: gluon-update $(GLUON_MAKE) update gluon-patch: - echo "Applying Patches ..." + echo 'Applying Patches ...' (cd $(GLUON_BUILD_DIR)) if [ `git branch --list patched` ]; then \ (git branch -D patched) \ fi (cd $(GLUON_BUILD_DIR); git checkout -B patching) - if [ -d "gluon-build/site/patches" -a "gluon-build/site/patches/*.patch" ]; then \ + if [ -d 'gluon-build/site/patches' -a 'gluon-build/site/patches/*.patch' ]; then \ (cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \ cd $(GLUON_BUILD_DIR); \ git clean -fd; \ From 47c429680a2345885b4cb0e63c59ac058c08ec1c Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:10:53 +0200 Subject: [PATCH 059/129] Makefile: rework how GLUON_MAKE is called call GLUON_MAKE as a sub make process set MAKEFLAGS instead of adding parameters to the command line stop printing directory changes synchronize output, useful for parallel execution (jobs) and logging fix bug with calculation of jobs (available threads to use by make): - count with grep instead of wc - only count lines that start with "processor": ^processor alternatively we could've switched to "nproc" instead remove GLUON_AUTOUPDATER_BRANCH, default is stable anyways two variables were move to site.mk by cb208a620c0521703645692d8690d9d5a50b3207 - GLUON_AUTOUPDATER_ENABLED - BROKEN remove them export GLUON_RELEASE export and set GLUON_SITEDIR for GLUON_MAKE instead of creating a symbolic link to site dir during gluon_prepare adjust PATCH_DIR site.mk sets GLUON_OUTPUTDIR > stop moving files after target manifest GLUON_MAKE builds right into the output folder in the GLUON_SITEDIR --- Makefile | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index d87a004..93211d3 100644 --- a/Makefile +++ b/Makefile @@ -3,29 +3,27 @@ GLUON_GIT_REF := v2022.1.4 GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') GLUON_BUILD_DIR := gluon-build -PATCH_DIR := $(GLUON_BUILD_DIR)/site/patches +export GLUON_SITEDIR := .. +PATCH_DIR := patches SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build -GLUON_AUTOUPDATER_BRANCH := stable - ifneq (,$(shell git describe --exact-match --tags 2>/dev/null)) - GLUON_AUTOUPDATER_ENABLED := 1 GLUON_RELEASE := $(shell git describe --tags 2>/dev/null) else - GLUON_AUTOUPDATER_ENABLED := 1 EXP_FALLBACK = $(shell date '+%Y%m%d') BUILD_NUMBER ?= $(EXP_FALLBACK) GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER) endif +export GLUON_RELEASE -JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l) +## Setup MAKE +JOBS ?= $(shell cat /proc/cpuinfo | grep -c ^processor) +MAKEFLAGS += -j$(JOBS) +MAKEFLAGS += --no-print-directory +MAKEFLAGS += --output-sync -GLUON_MAKE := $(MAKE) -j $(JOBS) --no-print-directory -C $(GLUON_BUILD_DIR) \ - BROKEN=1 \ - GLUON_RELEASE=$(GLUON_RELEASE) \ - GLUON_AUTOUPDATER_BRANCH=$(GLUON_AUTOUPDATER_BRANCH) \ - GLUON_AUTOUPDATER_ENABLED=$(GLUON_AUTOUPDATER_ENABLED) +GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR) info: @echo @@ -54,15 +52,18 @@ all: info sign: manifest $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest +# Note: $(GLUON_MAKE) is a recursive variable so it doesn't count as a $(MAKE). +# "+" tells MAKE that there is another $(MAKE) in the following shell script. +# This allows communication of MAKEFLAGS like -j to submake. +# https://stackoverflow.com/a/60706372/2721478 manifest: build - for branch in experimental beta stable; do \ + +for branch in experimental beta stable; do \ $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ done - mv -f $(GLUON_BUILD_DIR)/output/* ./output/ build: gluon-prepare output-clean cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true - for target in $(GLUON_TARGETS); do \ + +for target in $(GLUON_TARGETS); do \ echo ''Building target $$target''; \ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ done @@ -71,8 +72,7 @@ build: gluon-prepare output-clean gluon-prepare: gluon-update make gluon-patch - ln -sfT .. $(GLUON_BUILD_DIR)/site - $(GLUON_MAKE) update + +$(GLUON_MAKE) update gluon-patch: echo 'Applying Patches ...' From 451e854a218c3cc7d299a613fd18ef5862c64d49 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:22:27 +0200 Subject: [PATCH 060/129] Makefile: redo GLUON_RELEASE, error for missing git tag --- Makefile | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 93211d3..45bdf0c 100644 --- a/Makefile +++ b/Makefile @@ -8,15 +8,24 @@ PATCH_DIR := patches SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build + +## Create version scheme +EXP_FALLBACK = $(shell date '+%Y%m%d') +BUILD_NUMBER ?= $(EXP_FALLBACK) +GIT_TAG := $(shell git describe --tags 2>/dev/null) +ifeq (,$(GIT_TAG)) +ifndef GLUON_RELEASE +$(error Set GLUON_RELEASE or create a git tag) +endif +endif ifneq (,$(shell git describe --exact-match --tags 2>/dev/null)) - GLUON_RELEASE := $(shell git describe --tags 2>/dev/null) + GLUON_RELEASE ?= $(GIT_TAG) else - EXP_FALLBACK = $(shell date '+%Y%m%d') - BUILD_NUMBER ?= $(EXP_FALLBACK) - GLUON_RELEASE := $(shell git describe --tags)~exp$(BUILD_NUMBER) + GLUON_RELEASE ?= $(GIT_TAG)~exp$(BUILD_NUMBER) endif export GLUON_RELEASE + ## Setup MAKE JOBS ?= $(shell cat /proc/cpuinfo | grep -c ^processor) MAKEFLAGS += -j$(JOBS) From a077f0cda2214b0cba36f2a7212e1ed9b23f9e98 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:25:36 +0200 Subject: [PATCH 061/129] Makefile: redo info section list useful information for debugging: - GLUON_RELEASE, remove autoupdater branch - TARGETS and DEVICES, if we limit them via command line - MAKEFLAGS - git url and ref - number of patch files Show info on every execution except of cleaning --- Makefile | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 45bdf0c..982f385 100644 --- a/Makefile +++ b/Makefile @@ -34,12 +34,42 @@ MAKEFLAGS += --output-sync GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR) -info: - @echo - @echo '#########################' - @echo '# FFAC Firmware build' - @echo '# Building release $(GLUON_RELEASE) for branch $(GLUON_AUTOUPDATER_BRANCH)' - @echo + +## Build strings for INFO +define newline + + +endef +ifneq (,$(filter GLUON_TARGETS%,$(MAKEOVERRIDES))) + TARGETS_INFO := $(newline)\# for target(s) '$(GLUON_TARGETS)' +endif +ifneq (,$(filter GLUON_DEVICES%,$(MAKEOVERRIDES))) + DEVICE_INFO := $(newline)\# for device(s) '$(GLUON_DEVICES)' +endif + + +## Info section +define INFO := + +######################### +# FFAC Firmware build +# building release '$(GLUON_RELEASE)'$(TARGETS_INFO)$(DEVICE_INFO) +######################### +# MAKEFLAGS: +# $(MAKEFLAGS) +######################### +# git url: $(GLUON_GIT_URL) +# git ref: $(GLUON_GIT_REF) +######################### +# Found $(shell ls -1 $(PATCH_DIR) 2>/dev/null | wc -l) patches +######################### + +endef +# show info section for all make calls except the filtered ones +ifneq (,$(filter-out gluon-clean output-clean clean,$(MAKECMDGOALS))) +$(info $(INFO)) +endif + $(GLUON_BUILD_DIR): mkdir -p $(GLUON_BUILD_DIR) @@ -55,8 +85,9 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD cd $(GLUON_BUILD_DIR) && git clean -fd -all: info - $(MAKE) manifest + +## Build rules +all: manifest sign: manifest $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest From 8eef01619b9f5030ff65d6c5d24da33dbe815c3a Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:34:26 +0200 Subject: [PATCH 062/129] Makefile: move git refs into release.mk advantage: makefile stays the same across branches/releases --- Makefile | 4 ++-- release.mk | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 release.mk diff --git a/Makefile b/Makefile index 982f385..6de18c7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := v2022.1.4 +## Setup Build environment variables +include release.mk GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') GLUON_BUILD_DIR := gluon-build diff --git a/release.mk b/release.mk new file mode 100644 index 0000000..6692735 --- /dev/null +++ b/release.mk @@ -0,0 +1,2 @@ +GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git +GLUON_GIT_REF := v2022.1.4 From 997360de5a44f94fcd04535324e5594ccce73ccf Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:35:43 +0200 Subject: [PATCH 063/129] Makefile: rename targets to targets.mk substitute newlines with spaces in targets.mk --- Makefile | 2 +- targets => targets.mk | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) rename targets => targets.mk (73%) diff --git a/Makefile b/Makefile index 6de18c7..593cbcd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ ## Setup Build environment variables include release.mk -GLUON_TARGETS ?= $(shell cat targets | tr '\n' ' ') +include targets.mk GLUON_BUILD_DIR := gluon-build export GLUON_SITEDIR := .. diff --git a/targets b/targets.mk similarity index 73% rename from targets rename to targets.mk index 29a74e7..f2c217a 100644 --- a/targets +++ b/targets.mk @@ -1,3 +1,4 @@ +define GLUON_TARGETS := ath79-generic ath79-nand ath79-mikrotik @@ -20,6 +21,14 @@ x86-generic x86-geode x86-legacy x86-64 +endef + +ifneq ($(BROKEN),0) +define GLUON_TARGETS += bcm27xx-bcm2710 bcm27xx-bcm2711 mvebu-cortexa9 +endef +endif + +GLUON_TARGETS := $(GLUON_TARGETS:\n= ) From 2fbeb9e86fe99042b98528e381f50e55ef3c015b Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:37:01 +0200 Subject: [PATCH 064/129] Makefile: rename: OPKG_KEY_BUILD_DIR > OPKG_KEY_FOLDER --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 593cbcd..a2cf4d4 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ GLUON_BUILD_DIR := gluon-build export GLUON_SITEDIR := .. PATCH_DIR := patches SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key -OPKG_KEY_BUILD_DIR ?= $(HOME)/.key-build +OPKG_KEY_FOLDER ?= $(HOME)/.key-build ## Create version scheme @@ -102,7 +102,7 @@ manifest: build done build: gluon-prepare output-clean - cp OPKG_KEY_BUILD_DIR/* $(GLUON_BUILD_DIR)/openwrt || true + cp OPKG_KEY_FOLDER/* $(GLUON_BUILD_DIR)/openwrt || true +for target in $(GLUON_TARGETS); do \ echo ''Building target $$target''; \ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ From 4cfc83ae8f0e5888623b58c16ad647e07a5cdbc1 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:38:09 +0200 Subject: [PATCH 065/129] Makefile: explain available Custom Options at the top of the Makefile --- Makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Makefile b/Makefile index a2cf4d4..cbf567b 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,26 @@ +######################### +#### Custom Options: #### +######################### +# GLUON_RELEASE - customize full release name +# BUILD_NUMBER - customize only the build number of the release name +######################### +# GLUON_TARGETS - choose which targets to build (delimited by spaces) e.g. "ath79-generic ramips-mt7621" +# GLUON_DEVICES - choose which devices to build (delimited by spaces) e.g. "avm-fritz-box-4020 tp-link-tl-wdr4300-v1", moves images to devices/ instead of output/, no packages are copied to the devices/ folder +# BROKEN - set to 0 to disable building devices marked as broken +######################### +# GLUON_PRIORITY - set update priority (integer) +# GLUON_AUTOUPDATER_ENABLED - set to 0 to disable the autoupdater +# GLUON_LANGS - set to subset of (en de fr) to include less languages +######################### +# JOBS - set number of threads manually +# GLUON_DEBUG set to 1 to include debug symbols (requires at least 16MB of flash, advice: also set GLUON_DEVICES, run 'make clean' before executing if you care for all packages to be rebuilt with debug symbols) +# GLUON_MINIFY set to 0 to disable minification of scripts (lua etc.) +######################### +# SECRET_KEY_FILE - Path to your ECDSA signing key +# OPKG_KEY_FOLDER - Path to your OpenWrt package signing key +######################### + + ## Setup Build environment variables include release.mk include targets.mk From 1f34149327b5a02506a808e51c46a4113d85638b Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 06:49:52 +0200 Subject: [PATCH 066/129] Makefile: rework gluon-update and gluon-patch simplify calling git in a subfolder with GLUON_GIT gluon-update: checkout master, hide&prevent errors when branch empty list PATCH_FILES with variable for git apply rename gluon-patch to ffac-patch hide patch commands from being printed rework git apply so it runs from sitedir but in a subdirectory --- Makefile | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index cbf567b..ae24dac 100644 --- a/Makefile +++ b/Makefile @@ -56,6 +56,7 @@ MAKEFLAGS += --no-print-directory MAKEFLAGS += --output-sync GLUON_MAKE = $(MAKE) -C $(GLUON_BUILD_DIR) +GLUON_GIT = git -C $(GLUON_BUILD_DIR) ## Build strings for INFO @@ -94,19 +95,25 @@ $(info $(INFO)) endif +## Prepare folders $(GLUON_BUILD_DIR): mkdir -p $(GLUON_BUILD_DIR) + @echo # Note: "|" means "order only", e.g. "do not care about folder timestamps" +# In other words: call requirement when file/folder doesn't exist instead of when it is outdated. +# e.g. after running gluon-clean but not on every run. # https://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Prerequisite-Types.html $(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR) - git init $(GLUON_BUILD_DIR) - cd $(GLUON_BUILD_DIR) && git remote add origin $(GLUON_GIT_URL) + @git init $(GLUON_BUILD_DIR) -b master + @$(GLUON_GIT) remote add origin $(GLUON_GIT_URL) gluon-update: | $(GLUON_BUILD_DIR)/.git - cd $(GLUON_BUILD_DIR) && git fetch --tags origin $(GLUON_GIT_REF) - cd $(GLUON_BUILD_DIR) && git reset --hard FETCH_HEAD - cd $(GLUON_BUILD_DIR) && git clean -fd + @$(GLUON_GIT) fetch --tags origin $(GLUON_GIT_REF) + @$(GLUON_GIT) checkout master >/dev/null 2>&1 || exit 0 + @$(GLUON_GIT) reset --hard FETCH_HEAD + @$(GLUON_GIT) clean -fd + @echo ## Build rules @@ -134,26 +141,25 @@ build: gluon-prepare output-clean cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ gluon-prepare: gluon-update - make gluon-patch + make ffac-patch +$(GLUON_MAKE) update -gluon-patch: - echo 'Applying Patches ...' - (cd $(GLUON_BUILD_DIR)) - if [ `git branch --list patched` ]; then \ - (git branch -D patched) \ - fi - (cd $(GLUON_BUILD_DIR); git checkout -B patching) - if [ -d 'gluon-build/site/patches' -a 'gluon-build/site/patches/*.patch' ]; then \ - (cd $(GLUON_BUILD_DIR); git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \ - cd $(GLUON_BUILD_DIR); \ - git clean -fd; \ - git checkout -B patched; \ - git branch -D patching; \ +PATCH_FILES = $(shell find $(PATCH_DIR)/ -type f -name '*.patch') +ffac-patch: + @echo 'Applying patches…' + @if [ `$(GLUON_GIT) branch --list patched` ]; then \ + $(GLUON_GIT) branch -D patched; \ + fi + @$(GLUON_GIT) checkout -B patching + @if [ -d "$(PATCH_DIR)" -a "$(PATCH_DIR)/*.patch" ]; then \ + (git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_FILES)) || ( \ + $(GLUON_GIT) clean -fd; \ + $(GLUON_GIT) checkout -B patched; \ + $(GLUON_GIT) branch -D patching; \ exit 1 \ ) \ fi - (cd $(GLUON_BUILD_DIR); git branch -M patched) + @$(GLUON_GIT) branch -M patched gluon-clean: rm -rf $(GLUON_BUILD_DIR) From 9e1be0ee686def6e3c84302c9dbef5ef74c52972 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 07:34:39 +0200 Subject: [PATCH 067/129] Makefile: redo sign, for loop over all manifests requires SECRET_KEY_FILE to exist to run control, what is being echoed, hide commands --- Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ae24dac..415d8ef 100644 --- a/Makefile +++ b/Makefile @@ -119,8 +119,12 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git ## Build rules all: manifest -sign: manifest - $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$(GLUON_AUTOUPDATER_BRANCH).manifest +sign: manifest | $(SECRET_KEY_FILE) + @for branch in experimental beta stable; do \ + echo ''; \ + echo ''Signing $$branch.manifest''; \ + $(GLUON_BUILD_DIR)/contrib/sign.sh $(SECRET_KEY_FILE) output/images/sysupgrade/$$branch.manifest; \ + done # Note: $(GLUON_MAKE) is a recursive variable so it doesn't count as a $(MAKE). # "+" tells MAKE that there is another $(MAKE) in the following shell script. From f97b3a26e21e1209d78025d2795ca447ab5ea5de Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 07:40:36 +0200 Subject: [PATCH 068/129] Makefile: manifest explain what's being done (echo) hide the command that is being executed --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 415d8ef..4ba35e6 100644 --- a/Makefile +++ b/Makefile @@ -131,8 +131,10 @@ sign: manifest | $(SECRET_KEY_FILE) # This allows communication of MAKEFLAGS like -j to submake. # https://stackoverflow.com/a/60706372/2721478 manifest: build - +for branch in experimental beta stable; do \ - $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch;\ + +@for branch in experimental beta stable; do \ + echo ''; \ + echo ''Creating $$branch manifest''; \ + $(GLUON_MAKE) manifest GLUON_AUTOUPDATER_BRANCH=$$branch; \ done build: gluon-prepare output-clean From b8af7a0c1a1e1063bbc36a6478b15f09bc47a631 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 07:52:38 +0200 Subject: [PATCH 069/129] Makefile: rework gluon-prepare split gluon-prepare only update gluon modules when files where changed that require doing so - patch files - release.mk - modules - the checked out git hash of GLUON_BUILD_DIR changed due to gluon-update add FORCE target to force comparison of checked out git hash with file on every run only copy opkg keys to GLUON_BUILD_DIR/openwrt/ when updating gluon modules > move the line from target build to .modules only copy opkg keys when they exist in OPKG_KEY_FOLDER only copy opkg keys when none exist in GLUON_BUILD_DIR/openwrt/ make sure .modules gets rerun, when it's canceled during execution --- .gitignore | 2 ++ Makefile | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 66f2fc8..267274d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ gluon-build output *.orig *.swp +.cmp-git-head +.modules diff --git a/Makefile b/Makefile index 4ba35e6..0b62160 100644 --- a/Makefile +++ b/Makefile @@ -138,7 +138,6 @@ manifest: build done build: gluon-prepare output-clean - cp OPKG_KEY_FOLDER/* $(GLUON_BUILD_DIR)/openwrt || true +for target in $(GLUON_TARGETS); do \ echo ''Building target $$target''; \ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ @@ -146,12 +145,10 @@ build: gluon-prepare output-clean mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ -gluon-prepare: gluon-update - make ffac-patch - +$(GLUON_MAKE) update +gluon-prepare: gluon-update ffac-patch | .modules PATCH_FILES = $(shell find $(PATCH_DIR)/ -type f -name '*.patch') -ffac-patch: +ffac-patch: gluon-update @echo 'Applying patches…' @if [ `$(GLUON_GIT) branch --list patched` ]; then \ $(GLUON_GIT) branch -D patched; \ @@ -167,11 +164,29 @@ ffac-patch: fi @$(GLUON_GIT) branch -M patched +.cmp-git-head: FORCE | ffac-patch + @$(GLUON_GIT) rev-parse @{0} | cmp -s '$@' || $(GLUON_GIT) rev-parse @{0} > '$@' + +.modules: release.mk modules .cmp-git-head $(PATCH_DIR) $(PATCH_FILES) | ffac-patch + @echo + @echo Updating Gluon modules… + @rm -f .modules + +$(GLUON_MAKE) update + @if [ -f "$(OPKG_KEY_FOLDER)/key-build" ] && [ ! -f "$(GLUON_BUILD_DIR)/openwrt/key-build" ]; then \ + echo 'Installing your opkg keys'; \ + cp $(OPKG_KEY_FOLDER)/key-build* $(GLUON_BUILD_DIR)/openwrt/; \ + fi + @touch .modules + gluon-clean: + rm -f .modules rm -rf $(GLUON_BUILD_DIR) + @echo output-clean: mkdir -p output/ rm -rf output/* clean: gluon-clean output-clean + +FORCE: ; From c6816c6bb2a40da3986396fe9713a941c874a44c Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:02:41 +0200 Subject: [PATCH 070/129] Makefile: site.conf: rework build, handling of opkg packages hide ugly for loop and if commands when no keys exist in OPKG_KEY_FOLDER, copy over freshly generated opkg keys from GLUON_BUILD_DIR/openwrt/ to OPKG_KEY_FOLDER move opkg packages into folder with OPENWRT_BRANCH in its name use rsync for copying packages exclude packages available in openwrt feeds declare additional gluon opkg feeds in site.conf --- Makefile | 12 +++++++++--- site.conf | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 0b62160..3ad5dca 100644 --- a/Makefile +++ b/Makefile @@ -138,12 +138,18 @@ manifest: build done build: gluon-prepare output-clean - +for target in $(GLUON_TARGETS); do \ + +@for target in $(GLUON_TARGETS); do \ + echo ''; \ echo ''Building target $$target''; \ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ done - mkdir -p $(GLUON_BUILD_DIR)/output/opkg-packages - cp -r $(GLUON_BUILD_DIR)/openwrt/bin/packages $(GLUON_BUILD_DIR)/output/opkg-packages/gluon-ffac-$(GLUON_RELEASE)/ + @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ]; then \ + echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \ + cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \ + fi + $(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH))) + mkdir -p output/packages/$(PACKAGES_BRANCH) + rsync -a --exclude '*/base' --exclude '*/luci' --exclude '*/packages' --exclude '*/routing' --exclude '*/telephony' $(GLUON_BUILD_DIR)/openwrt/bin/packages/ output/packages/$(PACKAGES_BRANCH)/ gluon-prepare: gluon-update ffac-patch | .modules diff --git a/site.conf b/site.conf index 4873028..27dafd3 100644 --- a/site.conf +++ b/site.conf @@ -8,6 +8,9 @@ opkg = { extra = { modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S', + ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac', + gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon', + gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base', }, }, From b665d322be90b6b358cb4ee4f49e4d2279a5fb55 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:08:32 +0200 Subject: [PATCH 071/129] Makefile: support GLUON_DEVICES better when it's set: - disable make sign - don't move packages to devices folder in build target - create devices folder during output-clean (build requirement) - set GLUON_OUTPUTDIR to devices folder --- .gitignore | 1 + Makefile | 19 ++++++++++++++++++- site.mk | 3 +++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 267274d..d5750ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ gluon-build output +devices *.orig *.swp .cmp-git-head diff --git a/Makefile b/Makefile index 3ad5dca..ed08553 100644 --- a/Makefile +++ b/Makefile @@ -120,6 +120,10 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git all: manifest sign: manifest | $(SECRET_KEY_FILE) +ifndef GLUON_DEVICES + echo "make sign hasn't been designed to work while GLUON_DEVICES is set." + exit 1 +endif @for branch in experimental beta stable; do \ echo ''; \ echo ''Signing $$branch.manifest''; \ @@ -147,9 +151,11 @@ build: gluon-prepare output-clean echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \ cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \ fi +ifndef GLUON_DEVICES $(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH))) mkdir -p output/packages/$(PACKAGES_BRANCH) rsync -a --exclude '*/base' --exclude '*/luci' --exclude '*/packages' --exclude '*/routing' --exclude '*/telephony' $(GLUON_BUILD_DIR)/openwrt/bin/packages/ output/packages/$(PACKAGES_BRANCH)/ +endif gluon-prepare: gluon-update ffac-patch | .modules @@ -184,15 +190,26 @@ ffac-patch: gluon-update fi @touch .modules + +## Cleanup rules +devices-clean: + mkdir -p devices/ + rm -rf devices/* + gluon-clean: rm -f .modules rm -rf $(GLUON_BUILD_DIR) @echo output-clean: +ifdef GLUON_DEVICES + mkdir -p devices/ +else mkdir -p output/ rm -rf output/* +endif + @echo -clean: gluon-clean output-clean +clean: gluon-clean output-clean devices-clean FORCE: ; diff --git a/site.mk b/site.mk index aec6860..010e1db 100644 --- a/site.mk +++ b/site.mk @@ -54,6 +54,9 @@ endif GLUON_DEPRECATED := upgrade GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output +ifdef GLUON_DEVICES + GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices +endif GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules # Default priority for updates. From 656f9e0c5889d2617e7be62d02a7c389d30a527c Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:22:37 +0200 Subject: [PATCH 072/129] Makefile: add a way to update our patches also delegates GLUON_MAKE to subsequently update Gluon patches just in case our patch patches OpenWrt or another Gluon module --- Makefile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Makefile b/Makefile index ed08553..f039a41 100644 --- a/Makefile +++ b/Makefile @@ -190,6 +190,37 @@ ffac-patch: gluon-update fi @touch .modules +update-patches: gluon-update | .modules + @echo + @echo 'Updating our patches…' + @if [ `$(GLUON_GIT) branch --list refresh` ]; then \ + $(GLUON_GIT) branch -D refresh; \ + fi + @$(GLUON_GIT) restore . + @$(GLUON_GIT) clean -fd -q + @$(GLUON_GIT) checkout -B refreshing + @$(GLUON_GIT) commit --allow-empty -m "Patches" -q + +@for file in $(PATCH_FILES); do \ + echo ''; \ + echo ''Refreshing $$file''; \ + (git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $$file) && true;\ + EXIT_CODE=$$?; \ + if [ $$EXIT_CODE -ne 0 ]; then \ + echo ''Error applying patch $$file''; \ + $(GLUON_GIT) clean -fd -q; \ + $(GLUON_GIT) checkout -B refresh; \ + $(GLUON_GIT) branch -D refreshing; \ + break; \ + else \ + echo 'Updating Gluon patches'; \ + $(GLUON_MAKE) update-patches >/dev/null 2>&1; \ + $(GLUON_GIT) add --all; \ + $(GLUON_GIT) diff --staged > $$file; \ + $(GLUON_GIT) commit -a --amend --no-edit -q; \ + fi; \ + done; exit $$EXIT_CODE + @$(GLUON_GIT) branch -M refresh + ## Cleanup rules devices-clean: From ef9bb00169f2a80e8952177627159bf3fa043f0f Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:27:34 +0200 Subject: [PATCH 073/129] Makefile: disable all implicit rules also don't check for rebuilding "Makefile" before execution --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index f039a41..4508a78 100644 --- a/Makefile +++ b/Makefile @@ -243,4 +243,8 @@ endif clean: gluon-clean output-clean devices-clean +Makefile: ; + FORCE: ; + +.SUFFIXES: ; From 88cf379f01f80378d57d9df446683cdd94cd7665 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:28:48 +0200 Subject: [PATCH 074/129] Makefile: add .PHONY target - declare most targets as phony phony targets are not files and need to be run on every execution similar to FORCE but newer style FORCE needs to stay for the git hash target else it won't work (quirk) --- .gitignore | 2 +- Makefile | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d5750ac..bc752a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ gluon-build output -devices *.orig *.swp +*.log .cmp-git-head .modules diff --git a/Makefile b/Makefile index 4508a78..19b3787 100644 --- a/Makefile +++ b/Makefile @@ -248,3 +248,5 @@ Makefile: ; FORCE: ; .SUFFIXES: ; + +.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch update-patches gluon-clean output-clean From 2f689b273ad1418c42887a84b55f77ce1152f333 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:36:04 +0200 Subject: [PATCH 075/129] .gitignore: hide build.log files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index bc752a1..2a2ee65 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ gluon-build output +devices *.orig *.swp *.log From 8cdc2404f34cfbc55d03cf396c993da5e0a9908b Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 08:37:23 +0200 Subject: [PATCH 076/129] patches: fix Gluon's Makefile, GLUON_TARGETS specifically --- patches/gluon-makefile.patch | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 patches/gluon-makefile.patch diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch new file mode 100644 index 0000000..3ee2df0 --- /dev/null +++ b/patches/gluon-makefile.patch @@ -0,0 +1,18 @@ +diff --git a/Makefile b/Makefile +index 565a32a0..a39958fc 100644 +--- a/Makefile ++++ b/Makefile +@@ -111,11 +111,11 @@ update-modules: FORCE + update-ci: FORCE + @$(GLUON_ENV) scripts/update-ci.sh + +-GLUON_TARGETS := ++override GLUON_TARGETS := + + define GluonTarget + gluon_target := $(1)$$(if $(2),-$(2)) +-GLUON_TARGETS += $$(gluon_target) ++override GLUON_TARGETS += $$(gluon_target) + GLUON_TARGET_$$(gluon_target)_BOARD := $(1) + GLUON_TARGET_$$(gluon_target)_SUBTARGET := $(2) + endef From 560131b8df4b383e51bf954be74487643a0e246b Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Fri, 11 Aug 2023 07:18:33 +0000 Subject: [PATCH 077/129] run make update-patches --- patches/gluon-packages.patch | 2 +- patches/status-page-anonymization.patch | 10 ---------- patches/targets-bcm2711-raspberry-pi-4.patch | 6 +++--- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/patches/gluon-packages.patch b/patches/gluon-packages.patch index 3067221..42e5bbf 100644 --- a/patches/gluon-packages.patch +++ b/patches/gluon-packages.patch @@ -1,5 +1,5 @@ diff --git a/modules b/modules -index 333b29b2..a9d9cd11 100644 +index 333b29b2..2188e92e 100644 --- a/modules +++ b/modules @@ -12,5 +12,6 @@ PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch index 83152a2..2c59f03 100644 --- a/patches/status-page-anonymization.patch +++ b/patches/status-page-anonymization.patch @@ -1,13 +1,3 @@ -From 62c19102406a12ad613cb813acbbce0f4641404f Mon Sep 17 00:00:00 2001 -From: Jan Niehusmann -Date: Sun, 3 Mar 2019 23:36:57 +0100 -Subject: [PATCH] remove owner information from status page - ---- - .../lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo | 2 +- - .../luasrc/lib/gluon/status-page/controller/status-page.lua | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo index 3f149100..3f3ce8c0 100755 --- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch index 0c71d24..205f61c 100644 --- a/patches/targets-bcm2711-raspberry-pi-4.patch +++ b/patches/targets-bcm2711-raspberry-pi-4.patch @@ -1,6 +1,6 @@ diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711 new file mode 100644 -index 00000000..ba631911 +index 00000000..90420dd0 --- /dev/null +++ b/targets/bcm27xx-bcm2711 @@ -0,0 +1,9 @@ @@ -14,10 +14,10 @@ index 00000000..ba631911 + }, +}) diff --git a/targets/targets.mk b/targets/targets.mk -index 92b58ab8..05a74935 100644 +index 346377ea..e9674f85 100644 --- a/targets/targets.mk +++ b/targets/targets.mk -@@ -22,5 +22,6 @@ $(eval $(call GluonTarget,x86,64)) +@@ -25,5 +25,6 @@ $(eval $(call GluonTarget,x86,64)) ifneq ($(BROKEN),) $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested From d1af7c2ac76525f7441516d973b3078f8adedf7d Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Mon, 14 Aug 2023 02:47:40 +0200 Subject: [PATCH 078/129] redo gluon-packages.patch so it can be merged into other branches it's now a patch files that gluon applies this removes the requirement to modify all branches individually just for adding a script that is run on update --- patches/gluon-packages.patch | 40 ++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/patches/gluon-packages.patch b/patches/gluon-packages.patch index 42e5bbf..c019b23 100644 --- a/patches/gluon-packages.patch +++ b/patches/gluon-packages.patch @@ -1,13 +1,27 @@ -diff --git a/modules b/modules -index 333b29b2..2188e92e 100644 ---- a/modules -+++ b/modules -@@ -12,5 +12,6 @@ PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git - PACKAGES_ROUTING_BRANCH=openwrt-22.03 - PACKAGES_ROUTING_COMMIT=1cc7676b9f32acc30ec47f15fcb70380d5d6ef01 - --PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git --PACKAGES_GLUON_COMMIT=29912ec6308fd10b47763b4cf28a638d07f59973 -+PACKAGES_GLUON_REPO=https://github.com/ffac/packages -+PACKAGES_GLUON_BRANCH="feature/cleanup_opkg_keys" -+PACKAGES_GLUON_COMMIT=9fe0feadbfd6186e48319c8f68187943fcf69205 +diff --git a/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch b/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch +new file mode 100644 +index 00000000..ac347e07 +--- /dev/null ++++ b/patches/packages/gluon/0001-delete-etc-opkg-keys-on-autoupdater-upgrade-does-trigger-on-autoupdate-after-checking-that-the-image-is-correct.patch +@@ -0,0 +1,21 @@ ++From: Florian Maurer ++Date: Wed, 14 Jun 2023 09:33:48 +0200 ++Subject: delete /etc/opkg/keys on autoupdater upgrade - does trigger on autoupdate after checking that the image is correct ++ ++fixes https://github.com/freifunk-gluon/gluon/issues/2665 ++ ++diff --git a/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys b/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys ++new file mode 100755 ++index 0000000000000000000000000000000000000000..11fb5143f82e4b6080b88a14237c64f273b12850 ++--- /dev/null +++++ b/admin/autoupdater/files/usr/lib/autoupdater/upgrade.d/90delete_keys ++@@ -0,0 +1,9 @@ +++#!/usr/bin/lua +++local handle = io.popen("ls /etc/opkg/keys -1") +++local files = handle:read("*a") +++handle:close() +++ +++for file in files:gmatch("[^\r\n]+") do +++ local filePath = "/etc/opkg/keys/" .. file +++ os.remove(filePath) +++end From 4facd655e9fbb4b1e3543e0f29adffb6609a72c8 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Mon, 14 Aug 2023 08:01:34 +0000 Subject: [PATCH 079/129] Makefile: fix update-patches for module patches $(GLUON_MAKE) update-patches runs reliably now. Beforehand it created artifacts if there were module patches --- Makefile | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 19b3787..9d2a221 100644 --- a/Makefile +++ b/Makefile @@ -190,33 +190,40 @@ ffac-patch: gluon-update fi @touch .modules -update-patches: gluon-update | .modules + +## Patch system +patch-prepare: gluon-update + @echo + @echo 'Updating Gluon modules…' + +@$(GLUON_MAKE) update >/dev/null 2>&1 + +update-patches: patch-prepare @echo @echo 'Updating our patches…' @if [ `$(GLUON_GIT) branch --list refresh` ]; then \ $(GLUON_GIT) branch -D refresh; \ fi - @$(GLUON_GIT) restore . - @$(GLUON_GIT) clean -fd -q @$(GLUON_GIT) checkout -B refreshing @$(GLUON_GIT) commit --allow-empty -m "Patches" -q +@for file in $(PATCH_FILES); do \ echo ''; \ - echo ''Refreshing $$file''; \ (git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $$file) && true;\ EXIT_CODE=$$?; \ if [ $$EXIT_CODE -ne 0 ]; then \ echo ''Error applying patch $$file''; \ - $(GLUON_GIT) clean -fd -q; \ + $(GLUON_GIT) clean -fdq; \ $(GLUON_GIT) checkout -B refresh; \ $(GLUON_GIT) branch -D refreshing; \ break; \ else \ - echo 'Updating Gluon patches'; \ - $(GLUON_MAKE) update-patches >/dev/null 2>&1; \ + if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \ + echo 'Refreshing Gluon patches…'; \ + $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \ + fi; \ + echo ''Refreshing $$file''; \ $(GLUON_GIT) add --all; \ $(GLUON_GIT) diff --staged > $$file; \ - $(GLUON_GIT) commit -a --amend --no-edit -q; \ + $(GLUON_GIT) commit --amend --no-edit -q; \ fi; \ done; exit $$EXIT_CODE @$(GLUON_GIT) branch -M refresh @@ -249,4 +256,4 @@ FORCE: ; .SUFFIXES: ; -.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch update-patches gluon-clean output-clean +.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare update-patches gluon-clean output-clean From c397074898c0d6f05913d0698c6fd3e591b55fd5 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Thu, 17 Aug 2023 03:43:34 +0000 Subject: [PATCH 080/129] Makefile: create & edit patches --- Makefile | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9d2a221..6e6ffbe 100644 --- a/Makefile +++ b/Makefile @@ -195,8 +195,45 @@ ffac-patch: gluon-update patch-prepare: gluon-update @echo @echo 'Updating Gluon modules…' + @rm -f .modules +@$(GLUON_MAKE) update >/dev/null 2>&1 +patch: + @echo + @echo 'Creating a new patch from all changes found in $(GLUON_BUILD_DIR)' + @echo "Note: This will only create a correct patch, if you ran 'make patch-prepare' or 'make edit-patch' before you applied those changes." + @echo + @echo 'What should your new .patch file be called?' + +@$(GLUON_MAKE) update-patches >/dev/null 2>&1 + @if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \ + echo 'Found changes in Gluon modules and created new .patch files for them.'; \ + fi + @$(GLUON_GIT) add --all + @read file; \ + echo ''Creating $$file.patch containing these changes:''; \ + $(GLUON_GIT) status -s; \ + $(GLUON_GIT) diff --staged > $(PATCH_DIR)/$$file.patch; \ + $(GLUON_GIT) commit --no-edit -m "$$file.patch" -q + +edit-patch: patch-prepare + @echo + @echo 'Available patches:' + @ls -1 $(PATCH_DIR) | grep -E '\.patch$'' | sed -e 's/\.patch$///' + @echo + @echo Which one do you want to edit? + +@read file; \ + if [ ! -f "patches/$$file.patch" ]; then \ + echo ''Couldn\'t find file: $$file''; \ + exit 1; \ + else \ + git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_DIR)/$$file.patch; \ + if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \ + echo 'Patch contained patches for Gluon modules. Applying said patches…'; \ + $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \ + fi; \ + echo "You may edit $(GLUON_BUILD_DIR) now. Run 'make patch' once you are finished."; \ + fi + update-patches: patch-prepare @echo @echo 'Updating our patches…' @@ -256,4 +293,4 @@ FORCE: ; .SUFFIXES: ; -.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare update-patches gluon-clean output-clean +.PHONY: all gluon-update sign manifest build gluon-prepare ffac-patch patch-prepare patch edit-patches update-patches gluon-clean output-clean From 29c049bbbc0dffee1f1fad4ebbd8e95cc6b885db Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Thu, 17 Aug 2023 13:13:55 +0200 Subject: [PATCH 081/129] site.mk remove duplicate line --- site.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/site.mk b/site.mk index 010e1db..013339c 100644 --- a/site.mk +++ b/site.mk @@ -1,5 +1,4 @@ ## gluon site.mk Freifunk Regio Aachen -GLUON_DEPRECATED=upgrade ## GLUON_FEATURES # Specify Gluon features/packages to enable; From d58a9e372cdef7279c699d601bf5831d609612d0 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Sun, 20 Aug 2023 07:53:59 +0200 Subject: [PATCH 082/129] Makefile: show error during patch stuff, add ".patch" to echo --- Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 6e6ffbe..146a4ad 100644 --- a/Makefile +++ b/Makefile @@ -193,7 +193,6 @@ ffac-patch: gluon-update ## Patch system patch-prepare: gluon-update - @echo @echo 'Updating Gluon modules…' @rm -f .modules +@$(GLUON_MAKE) update >/dev/null 2>&1 @@ -223,13 +222,13 @@ edit-patch: patch-prepare @echo Which one do you want to edit? +@read file; \ if [ ! -f "patches/$$file.patch" ]; then \ - echo ''Couldn\'t find file: $$file''; \ + echo ''Couldn\'t find file: $$file.patch''; \ exit 1; \ else \ git apply --directory=$(GLUON_BUILD_DIR) --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose $(PATCH_DIR)/$$file.patch; \ if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \ echo 'Patch contained patches for Gluon modules. Applying said patches…'; \ - $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \ + $(GLUON_MAKE) refresh-patches >/dev/null; \ fi; \ echo "You may edit $(GLUON_BUILD_DIR) now. Run 'make patch' once you are finished."; \ fi @@ -255,7 +254,7 @@ update-patches: patch-prepare else \ if [ `$(GLUON_GIT) status -s patches | head -c1 | grep -E '.'` ]; then \ echo 'Refreshing Gluon patches…'; \ - $(GLUON_MAKE) refresh-patches >/dev/null 2>&1; \ + $(GLUON_MAKE) refresh-patches >/dev/null; \ fi; \ echo ''Refreshing $$file''; \ $(GLUON_GIT) add --all; \ From a49cf202ef7ecad9e602a0a7272ee286fdeb8e75 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Mon, 14 Aug 2023 03:33:58 +0200 Subject: [PATCH 083/129] release.mk: Update to release of Gluon v2023.1 --- CHANGELOG.md | 12 ++++++++++++ README.md | 5 +++-- release.mk | 2 +- site.conf | 18 +++++++++--------- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a305856..73a1738 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Freifunk Aachen Firmware Changelog +## v2023.1.0-2 + - release from gluon v2023.1 tags + - Makefile changes + - rebase onto v2022.1.x + +## v2023.1.0-1 + - release from current gluon master + - based on openwrt 22.03 + - soon to become v2023.1.1 when released in gluon + - adds support for new devices + - use ffac-bat4-mesh mesh id + ## v2022.1.14-1 - use ffac/community-packages for all packages - switch to ffac-bat4-mesh as new mesh id diff --git a/README.md b/README.md index 37d3b7a..8a43daa 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ This repository contains the site configuration for the Freifunk Aachen Gluon firmware. -This branch is compatible to Gluon v2022.1.x which is based on OpenWRT 22.03 +This is the `v2023.1.x` branch which is compatible to current Gluon v2023.1 release using OpenWRT 22.03. + +It allows updates from v2021.x onwards - so v2020 or before need to migrate to v2021 or v2022 first. This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation. Registration of the wireguard keys is done using a custom `wg-registration` package which sends the key through POST to our broker. @@ -27,7 +29,6 @@ The output must then be appended to the end of the `site.mk` Currently outdated further information can be found in the Freifunk Wiki[^wiki] - [^wiki]: https://wiki.freifunk.net/Freifunk_Aachen/Firmware#Dokumentation [^gluon-meshvpn]: https://gluon.readthedocs.io/en/latest/features/vpn.html#wireguard diff --git a/release.mk b/release.mk index 6692735..e7742ce 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := v2022.1.4 +GLUON_GIT_REF := v2023.1 #v2023.1.x diff --git a/site.conf b/site.conf index 27dafd3..435a96d 100644 --- a/site.conf +++ b/site.conf @@ -220,9 +220,9 @@ stable = { name = 'stable', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/stable/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/stable/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/stable/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/stable/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/stable/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/stable/sysupgrade', }, good_signatures = 4, pubkeys = { @@ -240,9 +240,9 @@ beta = { name = 'beta', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/beta/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/beta/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/beta/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/beta/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/beta/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/beta/sysupgrade', }, good_signatures = 3, pubkeys = { @@ -260,9 +260,9 @@ experimental = { name = 'experimental', mirrors = { - 'http://updates.freifunk-aachen.de/from-2022.1.x/experimental/sysupgrade', - 'http://updates.ffac.rocks/from-2022.1.x/experimental/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2022.1.x/experimental/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2023.1.x/experimental/sysupgrade', + 'http://updates.ffac.rocks/from-2023.1.x/experimental/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2023.1.x/experimental/sysupgrade', }, good_signatures = 2, pubkeys = { From 40466b5961ff0dd8a631a1cf36dd16e7cc1acff4 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Thu, 17 Aug 2023 03:36:07 +0000 Subject: [PATCH 084/129] run make update-patches --- patches/gluon-makefile.patch | 2 +- patches/status-page-anonymization.patch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch index 3ee2df0..fa1f78d 100644 --- a/patches/gluon-makefile.patch +++ b/patches/gluon-makefile.patch @@ -1,5 +1,5 @@ diff --git a/Makefile b/Makefile -index 565a32a0..a39958fc 100644 +index 695b1bc7..00dd9ceb 100644 --- a/Makefile +++ b/Makefile @@ -111,11 +111,11 @@ update-modules: FORCE diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch index 2c59f03..bd6afe3 100644 --- a/patches/status-page-anonymization.patch +++ b/patches/status-page-anonymization.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo -index 3f149100..3f3ce8c0 100755 +index ffe3651f..ef203e53 100755 --- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo +++ b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo @@ -8,4 +8,4 @@ badrequest() { From 7fb698e8e6428d896303fa922446227f09af7c19 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Mon, 14 Aug 2023 16:29:00 +0000 Subject: [PATCH 085/129] Add new devices - delete 6M Flash devices --- patches/010-primary-mac.patch | 13 ++++ patches/020-interfaces.patch | 14 +++- patches/cellular.patch | 24 ++++++ patches/targets-ath79-generic.patch | 77 +++++++++++++++++++ patches/targets-ath79-mikrotik.patch | 18 +++++ patches/targets-ath79-nand.patch | 16 ++++ patches/targets-ipq40xx-generic.patch | 31 ++++++++ patches/targets-lantiq-xrx200-devices.patch | 85 +++++++++++++++++++++ patches/targets-ramips-mt7620.patch | 18 +++++ patches/targets-ramips-mt7621.patch | 20 +++++ patches/targets-ramips-mt76x8.patch | 17 +++++ 11 files changed, 331 insertions(+), 2 deletions(-) create mode 100644 patches/010-primary-mac.patch create mode 100644 patches/cellular.patch create mode 100644 patches/targets-ath79-generic.patch create mode 100644 patches/targets-ath79-mikrotik.patch create mode 100644 patches/targets-ath79-nand.patch create mode 100644 patches/targets-ipq40xx-generic.patch create mode 100644 patches/targets-lantiq-xrx200-devices.patch create mode 100644 patches/targets-ramips-mt7620.patch create mode 100644 patches/targets-ramips-mt7621.patch create mode 100644 patches/targets-ramips-mt76x8.patch diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch new file mode 100644 index 0000000..c008a9c --- /dev/null +++ b/patches/010-primary-mac.patch @@ -0,0 +1,13 @@ +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +index e0b919f3..e56675e3 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +@@ -81,6 +81,8 @@ local primary_addrs = { + {'brcm2708'}, + {'ipq40xx', 'generic', { + 'avm,fritzbox-4040', ++ 'linksys,ea8300', ++ 'linksys,mr8300', + 'meraki,mr33', + 'plasmacloud,pa1200', + 'plasmacloud,pa2200', diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index f0c92b9..94bd559 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -1,12 +1,22 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 063ab1a1..9f847082 100755 +index 1ce81b65..cdd4ba6c 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -71,6 +71,11 @@ elseif platform.match('lantiq', 'xrx200', { +@@ -75,6 +75,21 @@ elseif platform.match('lantiq', 'xrx200', { 'arcadyan,vgv7510kw22-nor', }) then lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' +elseif platform.match('lantiq', 'xrx200', { ++ 'avm,fritz3370-rev2-hynix', ++ 'avm,fritz3370-rev2-micron', ++ 'avm,fritz3390', ++ 'avm,fritz7360sl', ++ 'avm,fritz7360-v2', ++ 'avm,fritz7362sl', ++ 'avm,fritz7430', ++}) then ++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' ++elseif platform.match('lantiq', 'xrx200', { + 'tplink,tdw8970', + 'tplink,tdw8980', +}) then diff --git a/patches/cellular.patch b/patches/cellular.patch new file mode 100644 index 0000000..dfe95b7 --- /dev/null +++ b/patches/cellular.patch @@ -0,0 +1,24 @@ +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +index 0099d1d8..98a21365 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', { + setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) + elseif platform.match('ath79', 'nand', { + 'zte,mf281', ++ 'zte,mf286r', + }) then + setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15) + elseif platform.match('ipq40xx', 'generic', { +diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +index ba4b5b48..40728360 100644 +--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua ++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +@@ -75,6 +75,7 @@ end + function M.is_cellular_device() + if M.match('ath79', 'nand', { + 'zte,mf281', ++ 'zte,mf286r', + 'glinet,gl-xe300', + }) then + return true diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch new file mode 100644 index 0000000..ce6c93a --- /dev/null +++ b/patches/targets-ath79-generic.patch @@ -0,0 +1,77 @@ +diff --git a/targets/ath79-generic b/targets/ath79-generic +index 7a5140c9..f92318b3 100644 +--- a/targets/ath79-generic ++++ b/targets/ath79-generic +@@ -474,22 +474,26 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { + packages = ATH10K_PACKAGES_QCA9888, + }) + +-device('tp-link-re355-v1', 'tplink_re355-v1', { +- manifest_aliases = { +- 'tp-link-re355', -- upgrade from OpenWrt 19.07 +- }, +- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, +- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant +- class = 'tiny', -- Only 6M of usable Firmware space ++device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', { ++ packages = ATH10K_PACKAGES_QCA9888, + }) + +-device('tp-link-re450-v1', 'tplink_re450-v1', { +- packages = ATH10K_PACKAGES_QCA9880, +- manifest_aliases = { +- 'tp-link-re450', -- upgrade from OpenWrt 19.07 +- }, +- class = 'tiny', -- Only 6M of usable Firmware space +-}) ++--device('tp-link-re355-v1', 'tplink_re355-v1', { ++-- manifest_aliases = { ++-- 'tp-link-re355', -- upgrade from OpenWrt 19.07 ++-- }, ++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, ++-- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant ++-- class = 'tiny', -- Only 6M of usable Firmware space ++--}) ++ ++--device('tp-link-re450-v1', 'tplink_re450-v1', { ++-- packages = ATH10K_PACKAGES_QCA9880, ++-- manifest_aliases = { ++-- 'tp-link-re450', -- upgrade from OpenWrt 19.07 ++-- }, ++-- class = 'tiny', -- Only 6M of usable Firmware space ++--}) + + device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') + device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') +@@ -503,11 +507,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { + }, + }) + +-device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { +- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, +- broken = true, -- OOM with 5GHz enabled in most environments +- class = 'tiny', -- 64M ath9k + ath10k +-}) ++--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { ++-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, ++-- broken = true, -- OOM with 5GHz enabled in most environments ++-- class = 'tiny', -- 64M ath9k + ath10k ++--}) + + device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { + manifest_aliases = { +@@ -604,3 +608,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { + }) + + device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') ++ ++device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { ++ packages = ATH10K_PACKAGES_QCA9880, ++}) ++ ++ ++-- Zyxel ++ ++device('zyxel-nbg6616', 'zyxel_nbg6616', { ++ packages = ATH10K_PACKAGES_QCA9880, ++}) diff --git a/patches/targets-ath79-mikrotik.patch b/patches/targets-ath79-mikrotik.patch new file mode 100644 index 0000000..8ba9f0f --- /dev/null +++ b/patches/targets-ath79-mikrotik.patch @@ -0,0 +1,18 @@ +diff --git a/targets/ath79-mikrotik b/targets/ath79-mikrotik +index c2002987..974ce347 100644 +--- a/targets/ath79-mikrotik ++++ b/targets/ath79-mikrotik +@@ -1,3 +1,13 @@ + include 'mikrotik.inc' + + device('mikrotik-routerboard-951ui-2nd-hap', 'mikrotik_routerboard-951ui-2nd') ++ ++device('mikrotik-routerboard-mapl-2nd', 'mikrotik_routerboard-mapl-2nd', { ++ aliases = {'mikrotik-routerboard-map-lite'}, ++ factory = false, ++}) ++ ++device('mikrotik-routerboard-wap-g-5hact2hnd', 'mikrotik_routerboard-wap-g-5hact2hnd', { ++ aliases = {'mikrotik-routerboard-wap-ac-t2'}, ++ factory = false, ++}) diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch new file mode 100644 index 0000000..d656aee --- /dev/null +++ b/patches/targets-ath79-nand.patch @@ -0,0 +1,16 @@ +diff --git a/targets/ath79-nand b/targets/ath79-nand +index 68bffa4e..ecf712b2 100644 +--- a/targets/ath79-nand ++++ b/targets/ath79-nand +@@ -62,6 +62,11 @@ device('zte-mf281', 'zte_mf281', { + packages = ATH10K_PACKAGES_QCA9888, + }) + ++device('zte-mf286r', 'zte_mf286r', { ++ broken = true, -- case must be opened to install ++ packages = ATH10K_PACKAGES_QCA9888, ++}) ++ + + -- Zyxel + diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch new file mode 100644 index 0000000..7f9a8bf --- /dev/null +++ b/patches/targets-ipq40xx-generic.patch @@ -0,0 +1,31 @@ +diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic +index df81a1b0..a56476c8 100644 +--- a/targets/ipq40xx-generic ++++ b/targets/ipq40xx-generic +@@ -95,6 +95,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { + + device('linksys-ea6350v3', 'linksys_ea6350v3') + ++device('linksys-ea8300-dallas', 'linksys_ea8300', { ++ packages = { -- exclude until Gluon supports third radio ++ '-ath10k-firmware-qca9888-ct', ++ '-ath10k-board-qca9888', ++ }, ++ broken = true, ++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+) ++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64 ++}) ++ ++device('linksys-mr8300-dallas', 'linksys_mr8300', { ++ packages = { -- exclude until Gluon supports third radio ++ '-ath10k-firmware-qca9888-ct', ++ '-ath10k-board-qca9888', ++ }, ++ broken = true, ++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+) ++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64 ++}) ++ + + -- Meraki + diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch new file mode 100644 index 0000000..7774713 --- /dev/null +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -0,0 +1,85 @@ +diff --git a/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +new file mode 100644 +index 00000000..e3f16905 +--- /dev/null ++++ b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +@@ -0,0 +1,53 @@ ++From: Felix Baumann ++Date: Tue, 28 Feb 2023 04:21:07 +0100 ++Subject: lantiq: fix ath9k-eeprom for AVM Fritz!Box 7430 ++ ++@grische noticed that the extracted wifi calibration data (ath9k-eeprom) ++is incorrect. ++Symptoms included: ++- wrong mac address ++- radio was detected like dbdc (2.4GHz and 5GHz support at the same time) ++ ++This patch fixes this by also reversing the order of bytes and throwing ++away the last 4 Bytes. ++Unlike caldata.sh the fritz_cal_extract.c doesn't support reversing. ++So this patch combines both methods. ++ ++Signed-off-by: Felix Baumann ++ ++diff --git a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom ++index c6bacb8d3c1629c6ebd290ac9d0ccccd18a0f86c..fa06437295830839b4b6ca42e072355019c559f8 100644 ++--- a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom +++++ b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom ++@@ -23,11 +23,29 @@ case "$FIRMWARE" in ++ avm,fritz7360-v2) ++ caldata_extract "urlader" 0x985 0x1000 ++ ;; ++- avm,fritz7412|\ ++- avm,fritz7430) +++ avm,fritz7412) ++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") || \ ++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e800 -e 0x207 -l 5120 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader") ++ ;; +++ avm,fritz7430) +++ reversed=$( \ +++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e000 -e 0x207 -l 5120 $(find_mtd_chardev "urlader") || \ +++ /usr/bin/fritz_cal_extract -i 1 -s 0x1e800 -e 0x207 -l 5120 $(find_mtd_chardev "urlader") | \ +++ hexdump -v -e '/1 "%02x "') +++ +++ caldata="" +++ i=0 +++ count=$((${#reversed} / 3 - 4)) +++ for byte in $reversed; do +++ i=$(($i+1)) +++ if [ "$i" -gt "$count" ]; then +++ break +++ fi +++ caldata="\x${byte}${caldata}" +++ done +++ +++ printf "%b" "$caldata" > /lib/firmware/$FIRMWARE +++ ;; ++ bt,homehub-v5a) ++ caldata_extract_ubi "caldata" 0x1000 0x1000 ++ ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c +diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 +index f54cd87f..80f0659d 100644 +--- a/targets/lantiq-xrx200 ++++ b/targets/lantiq-xrx200 +@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', { + broken = true, -- no button for setup mode; hw revision not visible on device + }) + ++device('avm-fritz-box-3390', 'avm_fritz3390', { ++ factory = false, ++}) ++ + device('avm-fritz-box-7360-sl', 'avm_fritz7360sl', { + factory = false, + aliases = {'avm-fritz-box-7360-v1'}, +@@ -47,6 +51,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { + factory = false, + }) + ++device('avm-fritz-box-7430', 'avm_fritz7430', { ++ factory = false, ++}) ++ + device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { + factory = false, + aliases = {'o2-box-6431'}, diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch new file mode 100644 index 0000000..3c550b5 --- /dev/null +++ b/patches/targets-ramips-mt7620.patch @@ -0,0 +1,18 @@ +diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 +index fbf57ba8..4c9a6367 100644 +--- a/targets/ramips-mt7620 ++++ b/targets/ramips-mt7620 +@@ -5,6 +5,13 @@ device('asus-rt-ac51u', 'asus_rt-ac51u', { + }) + + ++-- EDIMAX ++ ++device('edimax-br-6478ac-v2', 'edimax_br-6478ac-v2', { ++ factory = false, ++}) ++ ++ + -- GL.iNet + + device('gl-mt300a', 'glinet_gl-mt300a', { diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch new file mode 100644 index 0000000..ebf39b9 --- /dev/null +++ b/patches/targets-ramips-mt7621.patch @@ -0,0 +1,20 @@ +diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 +index 6060c49a..705b8832 100644 +--- a/targets/ramips-mt7621 ++++ b/targets/ramips-mt7621 +@@ -43,6 +43,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { + device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') + + ++-- MikroTik ++ ++device('mikrotik-routerboard-750gr3', 'mikrotik_routerboard-750gr3', { ++ aliases = {'mikrotik-routerboard-hex-v3'}, ++ factory = false, ++ packages = {'-hostapd-mini'}, ++}) ++ ++ + -- Netgear + + device('netgear-ex6150', 'netgear_ex6150', { diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch new file mode 100644 index 0000000..db64532 --- /dev/null +++ b/patches/targets-ramips-mt76x8.patch @@ -0,0 +1,17 @@ +diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 +index 52fb71be..382c3dfa 100644 +--- a/targets/ramips-mt76x8 ++++ b/targets/ramips-mt76x8 +@@ -62,9 +62,9 @@ device('tp-link-re200-v2', 'tplink_re200-v2') + + device('tp-link-re200-v3', 'tplink_re200-v3') + +-device('tp-link-re305', 'tplink_re305-v1', { +- class = 'tiny', -- Only 6M of usable Firmware space +-}) ++--device('tp-link-re305', 'tplink_re305-v1', { ++-- class = 'tiny', -- Only 6M of usable Firmware space ++--}) + + device('tp-link-tl-mr3020-v3', 'tplink_tl-mr3020-v3', { + factory = false, From bfaada7fee90fe778083a2818d0474497f594c35 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Sun, 20 Aug 2023 08:22:32 +0200 Subject: [PATCH 086/129] switch over to upcoming v2023.2 branch (maintained by herbetom) adjust patches to upstream changes: - re305, re355 and re450 were dropped upstream - update fb7430 patch to upstream changes - update covr-patch: add nmbm, refresh openwrt firmware-utils patch run make update-patches --- patches/add-covr-x1860.patch | 68 +++++++++++---------- patches/targets-ath79-generic.patch | 52 ++++------------ patches/targets-ipq40xx-generic.patch | 4 +- patches/targets-lantiq-xrx200-devices.patch | 12 ++-- patches/targets-ramips-mt7621.patch | 4 +- release.mk | 4 +- 6 files changed, 58 insertions(+), 86 deletions(-) diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index 1dba5a8..382bc59 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -1,24 +1,22 @@ -diff --git a/patches/openwrt/0004-Add-Dlink-sge-image.patch b/patches/openwrt/0004-Add-Dlink-sge-image.patch +diff --git a/patches/openwrt/0006-procd-add-Dlink-sge-image.patch b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch new file mode 100644 -index 00000000..0706ca09 +index 00000000..a84b7335 --- /dev/null -+++ b/patches/openwrt/0004-Add-Dlink-sge-image.patch -@@ -0,0 +1,893 @@ ++++ b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch +@@ -0,0 +1,885 @@ +From: Roland <75312877+RolandoMagico@users.noreply.github.com> +Date: Mon, 26 Jun 2023 18:03:51 +0200 +Subject: procd: add Dlink sge image + +diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch +new file mode 100644 -+index 0000000000..71bab9b418 ++index 0000000000000000000000000000000000000000..c87ad267dc2924c3520eb4fcae0c3ae2ca295017 +--- /dev/null ++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch -+@@ -0,0 +1,883 @@ -++diff --git a/CMakeLists.txt b/CMakeLists.txt -++index c1750d4..d7d4ed2 100644 ++@@ -0,0 +1,875 @@ ++--- a/CMakeLists.txt +++++ b/CMakeLists.txt -++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c "" "") +++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c " ++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}") ++ FW_UTIL(dgfirmware "" "" "") ++ FW_UTIL(dgn3500sum "" "" "") @@ -26,9 +24,6 @@ index 00000000..0706ca09 ++ FW_UTIL(dns313-header "" "" "") ++ FW_UTIL(edimax_fw_header "" "" "") ++ FW_UTIL(encode_crc "" "" "") -++diff --git a/src/dlink-sge-image.c b/src/dlink-sge-image.c -++new file mode 100644 -++index 0000000..9b567f4 ++--- /dev/null +++++ b/src/dlink-sge-image.c ++@@ -0,0 +1,510 @@ @@ -542,9 +537,6 @@ index 00000000..0706ca09 +++ else +++ image_encrypt(); +++} -++diff --git a/src/dlink-sge-image.h b/src/dlink-sge-image.h -++new file mode 100644 -++index 0000000..8966cc9 ++--- /dev/null +++++ b/src/dlink-sge-image.h ++@@ -0,0 +1,349 @@ @@ -897,17 +889,18 @@ index 00000000..0706ca09 +++w1+nGS0KL2+sJGFlDvc7fHJmVFZBqWeSQWPJTHimLI9yaIVS5mEnuBjKZpdUB57T +++-----END RSA PRIVATE KEY----- +++)"; -diff --git a/patches/openwrt/0005-Add-DLink-COVR-X1860.patch b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch +diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch new file mode 100644 -index 00000000..aa9f2245 +index 00000000..a1913492 --- /dev/null -+++ b/patches/openwrt/0005-Add-DLink-COVR-X1860.patch -@@ -0,0 +1,318 @@ ++++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch +@@ -0,0 +1,328 @@ +From: Roland <75312877+RolandoMagico@users.noreply.github.com> +Date: Mon, 26 Jun 2023 18:03:51 +0200 +Subject: add Dlink COVR-X1860 ++ +diff --git a/include/image-commands.mk b/include/image-commands.mk -+index 9220b8dec0..84032d338c 100644 ++index dc6ee6e7c160c0935c3d72fb26b88c4ebcf4b028..6666eddf8f72d3ad49aafe1b08d79c26e0089945 100644 +--- a/include/image-commands.mk ++++ b/include/image-commands.mk +@@ -226,6 +226,11 @@ define Build/copy-file @@ -924,10 +917,10 @@ index 00000000..aa9f2245 + @mv $@.new $@ +diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts +new file mode 100644 -+index 0000000000..c06c5e36ba ++index 0000000000000000000000000000000000000000..10d5db829b5692e6cf29d82ee57120bdde438a12 +--- /dev/null ++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts -+@@ -0,0 +1,186 @@ ++@@ -0,0 +1,195 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++ ++#include "mt7621.dtsi" @@ -1007,6 +1000,15 @@ index 00000000..aa9f2245 ++&nand { ++ status = "okay"; ++ +++ mediatek,nmbm; +++ /* rsvd = Remapping Range / NAND Erase-Size */ +++ /* rsvd = 0x800000 / 0x20000 */ +++ mediatek,bmt-max-reserved-blocks = <64>; +++ /* Remapping should include raw-nand we operate upon without UBI layer. */ +++ /* This includes (at least) the kernel which has to be loaded by U-Boot.*/ +++ mediatek,bmt-remap-range = +++ <0x0 0x9c0000>; +++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; @@ -1115,7 +1117,7 @@ index 00000000..aa9f2245 ++ }; ++}; +diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -+index a5b69839a7..7b43410a5a 100644 ++index fa4c83dbe18db3c5978c755695caf519327e89f4..787b0fd6c647579459b5ac3af97d3b4d150fd571 100644 +--- a/target/linux/ramips/image/mt7621.mk ++++ b/target/linux/ramips/image/mt7621.mk +@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621 @@ -1133,7 +1135,7 @@ index 00000000..aa9f2245 + define Build/arcadyan-trx + echo -ne "hsqs" > $@.hsqs + $(eval trx_magic=$(word 1,$(1))) -+@@ -552,6 +560,31 @@ define Device/cudy_x6-v2 ++@@ -569,6 +577,31 @@ define Device/cudy_x6-v2 + endef + TARGET_DEVICES += cudy_x6-v2 + @@ -1166,10 +1168,10 @@ index 00000000..aa9f2245 + DEVICE_VENDOR := D-Link + DEVICE_MODEL := DAP-1620 +diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+index cd746e84ee..a772bca6d1 100644 ++index 6057c171922e9861b0928b16352970eaadd54cb1..bc7a05e2fe7541eaa2d78b14f4b66b24e67ca72b 100644 +--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network ++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+@@ -91,6 +91,9 @@ ramips_setup_interfaces() ++@@ -92,6 +92,9 @@ ramips_setup_interfaces() + zyxel,nt7101) + ucidef_set_interfaces_lan_wan "lan" "wan" + ;; @@ -1179,7 +1181,7 @@ index 00000000..aa9f2245 + gnubee,gb-pc1) + ucidef_set_interface_lan "ethblack ethblue" + ;; -+@@ -185,6 +188,11 @@ ramips_setup_macs() ++@@ -186,6 +189,11 @@ ramips_setup_macs() + lan_mac=$wan_mac + label_mac=$wan_mac + ;; @@ -1192,7 +1194,7 @@ index 00000000..aa9f2245 + lan_mac=$(mtd_get_mac_ascii factory lanmac) + wan_mac=$(mtd_get_mac_ascii factory wanmac) +diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -+index 80c7273543..10e055d776 100644 ++index 3467e783f0482621ee933f1abcd7be780854bb38..79a521b4126e648aa7afbdc8ef7bb9bc70e34fad 100644 +--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac ++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +@@ -41,6 +41,13 @@ case "$board" in @@ -1210,22 +1212,22 @@ index 00000000..aa9f2245 + hw_mac_addr="$(mtd_get_mac_binary factory 0x4)" + [ "$PHYNBR" = "0" ] && \ +diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh -+index ce5fdd61ed..0dbd7874e8 100755 ++index 5d8305b788cce391335f2563d60c999f4d0b27de..6dc0f594afc66bc4f36c19165bc3a8582d40389d 100755 +--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh ++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh -+@@ -61,6 +61,7 @@ platform_do_upgrade() { -+ beeline,smartbox-giga|\ ++@@ -63,6 +63,7 @@ platform_do_upgrade() { + beeline,smartbox-turbo|\ ++ beeline,smartbox-turbo-plus|\ + belkin,rt1800|\ ++ dlink,covr-x1860-a1|\ + dlink,dap-x1860-a1|\ + dlink,dir-1960-a1|\ + dlink,dir-2640-a1|\ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index b0dabd4c..013a06a4 100644 +index 6f9fadbc..a4d67702 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -40,6 +40,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { +@@ -32,6 +32,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { -- D-Link diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index ce6c93a..b0bb0cc 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,49 +1,19 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 7a5140c9..f92318b3 100644 +index 56be6369..20a0a33a 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -474,22 +474,26 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) --device('tp-link-re355-v1', 'tplink_re355-v1', { -- manifest_aliases = { -- 'tp-link-re355', -- upgrade from OpenWrt 19.07 -- }, -- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, -- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant -- class = 'tiny', -- Only 6M of usable Firmware space +device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', { + packages = ATH10K_PACKAGES_QCA9888, - }) - --device('tp-link-re450-v1', 'tplink_re450-v1', { -- packages = ATH10K_PACKAGES_QCA9880, -- manifest_aliases = { -- 'tp-link-re450', -- upgrade from OpenWrt 19.07 -- }, -- class = 'tiny', -- Only 6M of usable Firmware space --}) -+--device('tp-link-re355-v1', 'tplink_re355-v1', { -+-- manifest_aliases = { -+-- 'tp-link-re355', -- upgrade from OpenWrt 19.07 -+-- }, -+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, -+-- broken = true, -- OOM with 5GHz enabled in most environments if device is 64M RAM variant -+-- class = 'tiny', -- Only 6M of usable Firmware space -+--}) ++}) + -+--device('tp-link-re450-v1', 'tplink_re450-v1', { -+-- packages = ATH10K_PACKAGES_QCA9880, -+-- manifest_aliases = { -+-- 'tp-link-re450', -- upgrade from OpenWrt 19.07 -+-- }, -+-- class = 'tiny', -- Only 6M of usable Firmware space -+--}) - device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') -@@ -503,11 +507,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { + device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') +@@ -480,11 +484,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { }, }) @@ -52,22 +22,22 @@ index 7a5140c9..f92318b3 100644 - broken = true, -- OOM with 5GHz enabled in most environments - class = 'tiny', -- 64M ath9k + ath10k -}) -+--device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { ++-- device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { +-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, +-- broken = true, -- OOM with 5GHz enabled in most environments +-- class = 'tiny', -- 64M ath9k + ath10k -+--}) ++-- }) device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { manifest_aliases = { -@@ -604,3 +608,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') + -+device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { -+ packages = ATH10K_PACKAGES_QCA9880, -+}) ++-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { ++-- packages = ATH10K_PACKAGES_QCA9880, ++-- }) + + +-- Zyxel diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 7f9a8bf..78511e2 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index df81a1b0..a56476c8 100644 +index a041130a..21bb3311 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -95,6 +95,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -92,6 +92,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index 7774713..da17e13 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -1,8 +1,8 @@ -diff --git a/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +diff --git a/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch new file mode 100644 -index 00000000..e3f16905 +index 00000000..9b7a21f9 --- /dev/null -+++ b/patches/openwrt/0014-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch ++++ b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch @@ -0,0 +1,53 @@ +From: Felix Baumann +Date: Tue, 28 Feb 2023 04:21:07 +0100 @@ -22,11 +22,11 @@ index 00000000..e3f16905 +Signed-off-by: Felix Baumann + +diff --git a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom -+index c6bacb8d3c1629c6ebd290ac9d0ccccd18a0f86c..fa06437295830839b4b6ca42e072355019c559f8 100644 ++index eefc39b30b463e431eecc46fb0bd6f5c4bab4a43..c8d7783f1933769d7cc737502bd233638ee80935 100644 +--- a/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom ++++ b/target/linux/lantiq/xrx200/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom -+@@ -23,11 +23,29 @@ case "$FIRMWARE" in -+ avm,fritz7360-v2) ++@@ -22,11 +22,29 @@ case "$FIRMWARE" in ++ avm,fritz7360sl) + caldata_extract "urlader" 0x985 0x1000 + ;; +- avm,fritz7412|\ diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index ebf39b9..9594542 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,8 +1,8 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 6060c49a..705b8832 100644 +index a4d67702..26f84c47 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -43,6 +43,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { +@@ -55,6 +55,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') diff --git a/release.mk b/release.mk index e7742ce..b6979c4 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ -GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := v2023.1 #v2023.1.x +GLUON_GIT_URL := https://github.com/herbetom/gluon.git +GLUON_GIT_REF := 0f0fc05fbcd7012256eb6e9ffd06aaa0540bdeb7 #next-23.05 #v2023.2.x From fb4a5fe87d8efdd18e83e4d5f22528e63ad0f030 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Sun, 20 Aug 2023 08:23:22 +0200 Subject: [PATCH 087/129] 020-interfaces: Fritz!Box 7530 - add lan1 as wan --- patches/020-interfaces.patch | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index 94bd559..4c6b0fe 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -1,8 +1,16 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 1ce81b65..cdd4ba6c 100755 +index 1ce81b65..24113719 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -75,6 +75,21 @@ elseif platform.match('lantiq', 'xrx200', { +@@ -71,10 +71,29 @@ elseif platform.match('ramips', 'mt7621', { + 'tplink,eap615-wall-v1', + }) then + lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan0' ++elseif platform.match('ipq40xx', 'generic', { ++ 'avm,fritzbox-7530', ++}) then ++ lan_ifname, wan_ifname = 'lan2 lan3 lan4', 'lan1' + elseif platform.match('lantiq', 'xrx200', { 'arcadyan,vgv7510kw22-nor', }) then lan_ifname, wan_ifname = 'lan1 lan2 lan3 lan4', 'wan' From 4404cad51a1b277637358ff9d12e451758363e5d Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 20 Aug 2023 09:38:39 +0200 Subject: [PATCH 088/129] activate web-cellular and fix sn112 key --- Makefile | 1 - README.md | 2 +- site.conf | 2 +- site.mk | 13 ++++++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 146a4ad..2de169a 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,6 @@ PATCH_DIR := patches SECRET_KEY_FILE ?= $(HOME)/.gluon-secret-key OPKG_KEY_FOLDER ?= $(HOME)/.key-build - ## Create version scheme EXP_FALLBACK = $(shell date '+%Y%m%d') BUILD_NUMBER ?= $(EXP_FALLBACK) diff --git a/README.md b/README.md index 1892ce6..7e8b6b7 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ firmware. This is the `v2023.2.x` branch which is compatible with currents Openwrt Master and will be merged into v2023.2.x once released. -Nothing is guaranteed here, it might get force-pushed from time to time to be rebased onto v2022.1.x. +Nothing is guaranteed here, it might get force-pushed from time to time to be rebased. It provides an option to test devices which are available in Gluon's master branch but are not released yet. This config uses the upstream `gluon-mesh-vpn-wireguard` [^gluon-meshvpn] implementation. diff --git a/site.conf b/site.conf index 9eb974a..72fb6ed 100644 --- a/site.conf +++ b/site.conf @@ -120,7 +120,7 @@ endpoint = '01.wg-node.freifunk-aachen.de:51811' }, sn112 = { - public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsn1jugaSIJ7VBHM=', + public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=', endpoint = '01.wg-node.freifunk-aachen.de:51812' }, sn113 = { diff --git a/site.mk b/site.mk index 910b7dc..3ceecb7 100644 --- a/site.mk +++ b/site.mk @@ -1,4 +1,4 @@ -## gluon site.mk Freifunk Regio Aachen +## gluon site.mk Freifunk Regio Aachen ## GLUON_FEATURES # Specify Gluon features/packages to enable; @@ -23,9 +23,8 @@ endef GLUON_FEATURES := $(GLUON_FEATURES:\n= ) define GLUON_FEATURES_standard := - +web-cellular endef -# web-cellular # wireless-encryption-wpa3 # gluon-mesh-wireless-sae GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) @@ -36,7 +35,6 @@ GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) # selection that would be enabled by default or due to the # chosen feature flags define GLUON_SITE_PACKAGES := -ffac-autoupdater-wifi-fallback ffac-ssid-changer ffac-wg-registration iwinfo @@ -44,6 +42,11 @@ respondd-module-airtime endef GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= ) +define GLUON_SITE_PACKAGES_standard := +ffac-autoupdater-wifi-fallback +endef +GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= ) + # Build everything by default ifeq ($(BROKEN),0) override BROKEN := @@ -346,4 +349,4 @@ endif ifeq ($(GLUON_TARGET),x86-legacy) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) -endif \ No newline at end of file +endif From b24df70a45622565c8adc9fb764f10b8e35f90c7 Mon Sep 17 00:00:00 2001 From: FFAC Date: Mon, 21 Aug 2023 21:40:32 +0000 Subject: [PATCH 089/129] release v2023.2.0-4 remove broken devices enable sn01 supernode disable french translation add covr-x1860 add asus-rt-ax53u --- patches/add-covr-x1860.patch | 17 ++----- patches/targets-ath79-generic.patch | 77 +++++++++++++++++++++++++++-- patches/targets-ramips-mt7620.patch | 25 +++++----- patches/targets-ramips-mt7621.patch | 15 +++++- patches/targets-ramips-mt76x8.patch | 20 ++++---- site.conf | 2 - site.mk | 2 +- targets.mk | 1 - 8 files changed, 113 insertions(+), 46 deletions(-) diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index 382bc59..b2865cb 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -891,10 +891,10 @@ index 00000000..a84b7335 +++)"; diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch new file mode 100644 -index 00000000..a1913492 +index 00000000..9f40638e --- /dev/null +++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch -@@ -0,0 +1,328 @@ +@@ -0,0 +1,319 @@ +From: Roland <75312877+RolandoMagico@users.noreply.github.com> +Date: Mon, 26 Jun 2023 18:03:51 +0200 +Subject: add Dlink COVR-X1860 @@ -917,10 +917,10 @@ index 00000000..a1913492 + @mv $@.new $@ +diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts +new file mode 100644 -+index 0000000000000000000000000000000000000000..10d5db829b5692e6cf29d82ee57120bdde438a12 ++index 0000000000000000000000000000000000000000..c06c5e36baaedacaef339bf91a08dabbba732898 +--- /dev/null ++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts -+@@ -0,0 +1,195 @@ ++@@ -0,0 +1,186 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT ++ ++#include "mt7621.dtsi" @@ -1000,15 +1000,6 @@ index 00000000..a1913492 ++&nand { ++ status = "okay"; ++ -++ mediatek,nmbm; -++ /* rsvd = Remapping Range / NAND Erase-Size */ -++ /* rsvd = 0x800000 / 0x20000 */ -++ mediatek,bmt-max-reserved-blocks = <64>; -++ /* Remapping should include raw-nand we operate upon without UBI layer. */ -++ /* This includes (at least) the kernel which has to be loaded by U-Boot.*/ -++ mediatek,bmt-remap-range = -++ <0x0 0x9c0000>; -++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index b0bb0cc..b226fc0 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,56 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 56be6369..20a0a33a 100644 +index 56be6369..dd003630 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { + class = 'tiny', -- 64M ath9k + ath10k + }) + +-device('tp-link-archer-c6-v2-eu-ru-jp', 'tplink_archer-c6-v2', { +- packages = ATH10K_PACKAGES_QCA9888, +- manifest_aliases = { +- 'tp-link-archer-c6-v2', -- Upgrade from OpenWrt 19.07 +- }, +-}) +- + device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', { + packages = ATH10K_PACKAGES_QCA9880, + }) +@@ -434,40 +427,17 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', { + broken = true, -- 64M ath9k + ath10k & power LED not working + }) + +-device('tp-link-cpe210-v1', 'tplink_cpe210-v1', { +- manifest_aliases = { +- 'tp-link-cpe210-v1.0', -- Upgrade from OpenWrt 19.07 +- 'tp-link-cpe210-v1.1', -- Upgrade from OpenWrt 19.07 +- }, +-}) +-device('tp-link-cpe210-v2', 'tplink_cpe210-v2', { +- manifest_aliases = { +- 'tp-link-cpe210-v2.0', -- Upgrade from OpenWrt 19.07 +- }, +-}) +-device('tp-link-cpe210-v3', 'tplink_cpe210-v3', { +- manifest_aliases = { +- 'tp-link-cpe210-v3.0', -- Upgrade from OpenWrt 19.07 +- 'tp-link-cpe210-v3.1', -- Upgrade from OpenWrt 19.07 +- 'tp-link-cpe210-v3.20', -- Upgrade from OpenWrt 19.07 +- }, +-}) + device('tp-link-cpe220-v3', 'tplink_cpe220-v3') +-device('tp-link-cpe510-v1', 'tplink_cpe510-v1', { +- manifest_aliases = { +- 'tp-link-cpe510-v1.0', -- upgrade from OpenWrt 19.07 +- 'tp-link-cpe510-v1.1', -- upgrade from OpenWrt 19.07 +- }, +-}) +-device('tp-link-cpe510-v2', 'tplink_cpe510-v2') +-device('tp-link-cpe510-v3', 'tplink_cpe510-v3') +- + device('tp-link-cpe710-v1', 'tplink_cpe710-v1') + + device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -13,7 +61,7 @@ index 56be6369..20a0a33a 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -480,11 +484,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { +@@ -480,11 +450,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { }, }) @@ -30,7 +78,28 @@ index 56be6369..20a0a33a 100644 device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { manifest_aliases = { -@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -503,20 +473,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', { + }) + device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5') + +-device('tp-link-wbs210-v1', 'tplink_wbs210-v1', { +- manifest_aliases = { +- 'tp-link-wbs210-v1.20', -- upgrade from OpenWrt 19.07 +- }, +-}) +- +-device('tp-link-wbs210-v2', 'tplink_wbs210-v2') +- +-device('tp-link-wbs510-v1', 'tplink_wbs510-v1', { +- manifest_aliases = { +- 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07 +- }, +-}) +- + -- Ubiquiti + + -- device('ubiquiti-nanostation-loco-m-xw', 'ubnt_nanostation-loco-m-xw', { +@@ -581,3 +537,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch index 3c550b5..79747a9 100644 --- a/patches/targets-ramips-mt7620.patch +++ b/patches/targets-ramips-mt7620.patch @@ -1,18 +1,19 @@ diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 -index fbf57ba8..4c9a6367 100644 +index fbf57ba8..c9fd5627 100644 --- a/targets/ramips-mt7620 +++ b/targets/ramips-mt7620 -@@ -5,6 +5,13 @@ device('asus-rt-ac51u', 'asus_rt-ac51u', { - }) +@@ -31,14 +31,6 @@ device('netgear-ex3700', 'netgear_ex3700', { + -- Nexx -+-- EDIMAX -+ -+device('edimax-br-6478ac-v2', 'edimax_br-6478ac-v2', { -+ factory = false, -+}) -+ -+ - -- GL.iNet +-device('nexx-wt3020-8m', 'nexx_wt3020-8m', { +- aliases = { +- 'nexx-wt3020ad', +- 'nexx-wt3020f', +- 'nexx-wt3020h', +- }, +-}) +- + -- TP-Link - device('gl-mt300a', 'glinet_gl-mt300a', { + local tplink_region_suffix = '' diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 9594542..c7e5098 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,8 +1,19 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index a4d67702..26f84c47 100644 +index 6f9fadbc..cb699c68 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -55,6 +55,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { +@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', { + }, + }) + ++device('asus-rt-ax53u', 'asus_rt-ax53u', { ++ factory = false, ++}) ++ + + -- Cudy + +@@ -49,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch index db64532..9d4ad12 100644 --- a/patches/targets-ramips-mt76x8.patch +++ b/patches/targets-ramips-mt76x8.patch @@ -1,17 +1,15 @@ diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 -index 52fb71be..382c3dfa 100644 +index 1e27ac35..10ef9d65 100644 --- a/targets/ramips-mt76x8 +++ b/targets/ramips-mt76x8 -@@ -62,9 +62,9 @@ device('tp-link-re200-v2', 'tplink_re200-v2') +@@ -20,10 +20,6 @@ device('gl.inet-vixmini', 'glinet_vixmini', { - device('tp-link-re200-v3', 'tplink_re200-v3') + -- Netgear --device('tp-link-re305', 'tplink_re305-v1', { -- class = 'tiny', -- Only 6M of usable Firmware space +-device('netgear-r6020', 'netgear_r6020', { +- factory_ext = '.img', -}) -+--device('tp-link-re305', 'tplink_re305-v1', { -+-- class = 'tiny', -- Only 6M of usable Firmware space -+--}) - - device('tp-link-tl-mr3020-v3', 'tplink_tl-mr3020-v3', { - factory = false, +- + device('netgear-r6120', 'netgear_r6120', { + factory_ext = '.img', + }) diff --git a/site.conf b/site.conf index 72fb6ed..0df15bf 100644 --- a/site.conf +++ b/site.conf @@ -110,7 +110,6 @@ wireguard = { broker = 'wg-broker.freifunk-aachen.de/api/add_key', peers = { - --[[ remove sn1 for now sn120 = { public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=', endpoint = '01.wg-node.freifunk-aachen.de:51820' @@ -151,7 +150,6 @@ public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=', endpoint = '01.wg-node.freifunk-aachen.de:51819' }, - ]] sn220 = { public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=', endpoint = '02.wg-node.freifunk-aachen.de:51820' diff --git a/site.mk b/site.mk index 3ceecb7..1e1d327 100644 --- a/site.mk +++ b/site.mk @@ -71,7 +71,7 @@ GLUON_AUTOUPDATER_ENABLED ?= 1 GLUON_REGION ?= eu # Languages to include -GLUON_LANGS ?= en de fr +GLUON_LANGS ?= en de # Additional package list generated by contrib/genpkglist.py INCLUDE_USB := \ diff --git a/targets.mk b/targets.mk index 9a61787..f2c217a 100644 --- a/targets.mk +++ b/targets.mk @@ -10,7 +10,6 @@ ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 -mediatek-filogic mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 From a0d2154575150366e133d2f92def320bedf2e7f6 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 24 Aug 2023 23:18:06 +0200 Subject: [PATCH 090/129] remove broken devices due to firmware size readd ASUS RT-AX53U and Netgear WAX206 --- patches/targets-ath79-generic.patch | 17 ++++---- patches/targets-lantiq-xrx200-devices.patch | 13 +++++- patches/targets-mediatek-mt7622.patch | 19 +++++++++ patches/targets-ramips-mt7620.patch | 46 ++++++++++++++++++--- patches/targets-ramips-mt7621.patch | 4 +- 5 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 patches/targets-mediatek-mt7622.patch diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index b226fc0..60874df 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 56be6369..dd003630 100644 +index 56be6369..93970064 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic @@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { @@ -16,7 +16,7 @@ index 56be6369..dd003630 100644 device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', { packages = ATH10K_PACKAGES_QCA9880, }) -@@ -434,40 +427,17 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', { +@@ -434,33 +427,7 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', { broken = true, -- 64M ath9k + ath10k & power LED not working }) @@ -47,10 +47,10 @@ index 56be6369..dd003630 100644 -}) -device('tp-link-cpe510-v2', 'tplink_cpe510-v2') -device('tp-link-cpe510-v3', 'tplink_cpe510-v3') -- + device('tp-link-cpe710-v1', 'tplink_cpe710-v1') - device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -468,6 +435,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -61,7 +61,7 @@ index 56be6369..dd003630 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -480,11 +450,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { +@@ -480,11 +451,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { }, }) @@ -78,7 +78,7 @@ index 56be6369..dd003630 100644 device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { manifest_aliases = { -@@ -503,20 +473,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', { +@@ -503,19 +474,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', { }) device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5') @@ -95,11 +95,10 @@ index 56be6369..dd003630 100644 - 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07 - }, -}) -- + -- Ubiquiti - -- device('ubiquiti-nanostation-loco-m-xw', 'ubnt_nanostation-loco-m-xw', { -@@ -581,3 +537,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -581,3 +539,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index da17e13..2afd2e5 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -58,7 +58,7 @@ index 00000000..9b7a21f9 + caldata_extract_ubi "caldata" 0x1000 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index f54cd87f..80f0659d 100644 +index f54cd87f..57d974cb 100644 --- a/targets/lantiq-xrx200 +++ b/targets/lantiq-xrx200 @@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', { @@ -83,3 +83,14 @@ index f54cd87f..80f0659d 100644 device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { factory = false, aliases = {'o2-box-6431'}, +@@ -59,10 +67,6 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { + -- used as WAN ports. Clients connected to these + -- ports will be connected to your private network. + +-device('tp-link-td-w8970', 'tplink_tdw8970', { +- factory = false, +-}) +- + device('tp-link-td-w8980', 'tplink_tdw8980', { + factory = false, + aliases = {'tp-link-td-w9980'}, diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch new file mode 100644 index 0000000..f93b10a --- /dev/null +++ b/patches/targets-mediatek-mt7622.patch @@ -0,0 +1,19 @@ +diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622 +index 8376c397..e93f95f4 100644 +--- a/targets/mediatek-mt7622 ++++ b/targets/mediatek-mt7622 +@@ -11,6 +11,14 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', { + manifest_aliases = {'ubiquiti-unifi-6-lr'}, + }) + ++ ++-- Netgear ++ ++device('netgear-wax206', 'netgear_wax206', { ++ factory_ext = '.img', ++}) ++ ++ + -- Xiaomi + + device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', { diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch index 79747a9..7351137 100644 --- a/patches/targets-ramips-mt7620.patch +++ b/patches/targets-ramips-mt7620.patch @@ -1,11 +1,23 @@ diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 -index fbf57ba8..c9fd5627 100644 +index fbf57ba8..de1861a0 100644 --- a/targets/ramips-mt7620 +++ b/targets/ramips-mt7620 -@@ -31,14 +31,6 @@ device('netgear-ex3700', 'netgear_ex3700', { - - -- Nexx +@@ -19,48 +19,6 @@ device('gl-mt750', 'glinet_gl-mt750', { + factory = false, + }) +--- Netgear +- +-device('netgear-ex3700', 'netgear_ex3700', { +- aliases = { +- 'netgear-ex3800', +- }, +- manifest_aliases = {'netgear-ex3700-ex3800'}, +- factory_ext = '.chk', +-}) +- +--- Nexx +- -device('nexx-wt3020-8m', 'nexx_wt3020-8m', { - aliases = { - 'nexx-wt3020ad', @@ -14,6 +26,28 @@ index fbf57ba8..c9fd5627 100644 - }, -}) - - -- TP-Link +--- TP-Link +- +-local tplink_region_suffix = '' +-if (env.GLUON_REGION or '') ~= '' then +- tplink_region_suffix = '-' .. env.GLUON_REGION +-end +- +-device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { +- factory = false, +-}) +- +-device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { +- factory = false, +-}) +- +-device('tp-link-archer-c20i', 'tplink_archer-c20i') +- +-device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { +- factory = '-squashfs-factory' .. tplink_region_suffix, +- manifest_aliases = {'tp-link-archer-c50'}, +-}) +- + + -- Xiaomi - local tplink_region_suffix = '' diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index c7e5098..0413644 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 6f9fadbc..cb699c68 100644 +index 6f9fadbc..cf9e3116 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', { @@ -13,7 +13,7 @@ index 6f9fadbc..cb699c68 100644 -- Cudy -@@ -49,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { +@@ -49,6 +53,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') From 35dce81bffd39ed9e36d5f5a509278f685c0d257 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Wed, 23 Aug 2023 05:00:18 +0000 Subject: [PATCH 091/129] Makefile fixes - gluon-update: set GLUON_GIT_URL on every update in-case it was modified in release.mk else changing it would require make gluon-clean - improve text output of make sign (silence commands) invert ifdef, sign is supposed to error when GLUON_DEVICES is set, not when it's unset --- Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2de169a..2dbd0f7 100644 --- a/Makefile +++ b/Makefile @@ -108,6 +108,7 @@ $(GLUON_BUILD_DIR)/.git: | $(GLUON_BUILD_DIR) @$(GLUON_GIT) remote add origin $(GLUON_GIT_URL) gluon-update: | $(GLUON_BUILD_DIR)/.git + @$(GLUON_GIT) remote set-url origin $(GLUON_GIT_URL) @$(GLUON_GIT) fetch --tags origin $(GLUON_GIT_REF) @$(GLUON_GIT) checkout master >/dev/null 2>&1 || exit 0 @$(GLUON_GIT) reset --hard FETCH_HEAD @@ -119,9 +120,10 @@ gluon-update: | $(GLUON_BUILD_DIR)/.git all: manifest sign: manifest | $(SECRET_KEY_FILE) -ifndef GLUON_DEVICES - echo "make sign hasn't been designed to work while GLUON_DEVICES is set." - exit 1 +ifdef DEVICE_INFO + @echo + @echo "make sign hasn't been designed to work while GLUON_DEVICES is set." + @exit 1 endif @for branch in experimental beta stable; do \ echo ''; \ From bed128a38ce80c7366373d14c551ffccd8681af2 Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Wed, 23 Aug 2023 05:03:46 +0000 Subject: [PATCH 092/129] Update to Gluon master (OpenWrt 23) make update-patches --- patches/add-covr-x1860.patch | 8 ++++---- patches/targets-ath79-generic.patch | 2 +- patches/targets-ipq40xx-generic.patch | 4 ++-- patches/targets-lantiq-xrx200-devices.patch | 4 ++-- patches/targets-ramips-mt7621.patch | 4 ++-- release.mk | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index b2865cb..332619c 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -1,8 +1,8 @@ -diff --git a/patches/openwrt/0006-procd-add-Dlink-sge-image.patch b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch +diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch new file mode 100644 index 00000000..a84b7335 --- /dev/null -+++ b/patches/openwrt/0006-procd-add-Dlink-sge-image.patch ++++ b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch @@ -0,0 +1,885 @@ +From: Roland <75312877+RolandoMagico@users.noreply.github.com> +Date: Mon, 26 Jun 2023 18:03:51 +0200 @@ -889,11 +889,11 @@ index 00000000..a84b7335 +++w1+nGS0KL2+sJGFlDvc7fHJmVFZBqWeSQWPJTHimLI9yaIVS5mEnuBjKZpdUB57T +++-----END RSA PRIVATE KEY----- +++)"; -diff --git a/patches/openwrt/0007-add-Dlink-COVR-X1860.patch b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch +diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch new file mode 100644 index 00000000..9f40638e --- /dev/null -+++ b/patches/openwrt/0007-add-Dlink-COVR-X1860.patch ++++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch @@ -0,0 +1,319 @@ +From: Roland <75312877+RolandoMagico@users.noreply.github.com> +Date: Mon, 26 Jun 2023 18:03:51 +0200 diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 60874df..9c1eebd 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 56be6369..93970064 100644 +index aafcb22f..7db926b3 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic @@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 78511e2..1cad386 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index a041130a..21bb3311 100644 +index b6a49ca7..96765dc1 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -92,6 +92,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -73,6 +73,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index 2afd2e5..2cccbd7 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -1,8 +1,8 @@ -diff --git a/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch new file mode 100644 index 00000000..9b7a21f9 --- /dev/null -+++ b/patches/openwrt/0008-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch ++++ b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch @@ -0,0 +1,53 @@ +From: Felix Baumann +Date: Tue, 28 Feb 2023 04:21:07 +0100 diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 0413644..07a43a5 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 6f9fadbc..cf9e3116 100644 +index a4d67702..cb699c68 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', { @@ -13,7 +13,7 @@ index 6f9fadbc..cf9e3116 100644 -- Cudy -@@ -49,6 +53,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { +@@ -55,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') diff --git a/release.mk b/release.mk index b6979c4..e75ebb9 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ -GLUON_GIT_URL := https://github.com/herbetom/gluon.git -GLUON_GIT_REF := 0f0fc05fbcd7012256eb6e9ffd06aaa0540bdeb7 #next-23.05 #v2023.2.x +GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git +GLUON_GIT_REF := master # v2023.2 From cfbc027e361474ce8d15e31bcc5d7ccbd2b310ac Mon Sep 17 00:00:00 2001 From: FFAC Date: Fri, 1 Sep 2023 15:32:17 +0000 Subject: [PATCH 093/129] ax53u is upstream, add filogic target, add zyxel wsm20 --- patches/targets-ramips-mt7621.patch | 30 +++++++++++++++++------------ targets.mk | 1 + 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 07a43a5..c80930e 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,23 +1,30 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index a4d67702..cb699c68 100644 +index be2e2152..4bc21763 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -7,6 +7,10 @@ device('asus-rt-ac57u-v1', 'asus_rt-ac57u-v1', { - }, +@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { + factory = false, }) -+device('asus-rt-ax53u', 'asus_rt-ax53u', { ++device('cudy-m1800', 'cudy_m1800', { + factory = false, +}) + + device('cudy-x6-v1', 'cudy_x6-v1', { + factory = false, + }) +@@ -149,9 +159,21 @@ device('zyxel-nwa55axe', 'zyxel_nwa55axe', { + broken = true, -- Missing LED / Reset button + }) - -- Cudy - -@@ -55,6 +59,15 @@ device('gl.inet-gl-mt1300', 'glinet_gl-mt1300', { - device('mercusys-mr70x-v1', 'mercusys_mr70x-v1') ++device('zyxel-wsm20', 'zyxel_wsm20', { ++ factory = false, ++}) ++ + -- Devices without WLAN -+-- MikroTik ++-- Mikrotik + +device('mikrotik-routerboard-750gr3', 'mikrotik_routerboard-750gr3', { + aliases = {'mikrotik-routerboard-hex-v3'}, @@ -25,7 +32,6 @@ index a4d67702..cb699c68 100644 + packages = {'-hostapd-mini'}, +}) + -+ - -- Netgear + -- Ubiquiti - device('netgear-ex6150', 'netgear_ex6150', { + device('ubiquiti-edgerouter-x', 'ubnt_edgerouter-x', { diff --git a/targets.mk b/targets.mk index f2c217a..9a61787 100644 --- a/targets.mk +++ b/targets.mk @@ -10,6 +10,7 @@ ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 +mediatek-filogic mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 From 229db8c0aa9ed17ea5bf2eee197737254a09e9f5 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sat, 30 Sep 2023 15:15:03 +0200 Subject: [PATCH 094/129] update release notes, update to latest gluon --- CHANGELOG.md | 25 +++++++++++++++++++++++-- modules | 4 ++-- release.mk | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fd4da3..93110c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,31 @@ # Freifunk Aachen Firmware Changelog -## v2023.2.0-x +## v2023.2.0-6 + - update openwrt to nearly v23.05.0-rc4 + - update community-packages + - zyxel wsm20 is upstream + +## v2023.2.0-5 + - ax53u is upstream, + - add filogic target + - add zyxel wsm20 + +## v2023.2.0-4 + - remove broken devices + - enable sn01 supernode + - disable french translation + - add covr-x1860 + - add asus-rt-ax53u + +## v2023.2.0-3 + - add recovery and factory for covr-x1860 + +## v2023.2.0-2 + - update openwrt to v23.05 branch ## v2023.2.0-1 - switch to openwrt master - build from gluon master - - this will be released as v2023.2.1 gluon someday hopefully + - this will be released as v2023.2.0 gluon someday hopefully - remove mbedtls and stay with openssl for now - switch to ffac-bat4-mesh mesh id diff --git a/modules b/modules index a5bfd9a..114fe27 100644 --- a/modules +++ b/modules @@ -1,5 +1,5 @@ GLUON_SITE_FEEDS="ffac" -PACKAGES_FFAC_REPO=https://github.com/ffac/community-packages.git -PACKAGES_FFAC_COMMIT=b74de3db2965a02603ec7b2a32b719c6418105a2 +PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git +PACKAGES_FFAC_COMMIT=ca08c5446221cee0fc3d65b7dff2f12101a3ca59 PACKAGES_FFAC_BRANCH=master diff --git a/release.mk b/release.mk index e75ebb9..3d61e08 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := master # v2023.2 +GLUON_GIT_REF := 1b6ddac3c608961399c4877198dd552c12c3f07b # master From f923ce69a4830cb83ea1dbbc4a414654c84eba81 Mon Sep 17 00:00:00 2001 From: FFAC Date: Sat, 9 Sep 2023 21:56:01 +0000 Subject: [PATCH 095/129] update patches --- patches/add-covr-x1860.patch | 4 ++-- patches/targets-bcm2711-raspberry-pi-4.patch | 4 ++-- patches/targets-ramips-mt7621.patch | 12 +++--------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index 332619c..46c5440 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -1215,10 +1215,10 @@ index 00000000..9f40638e + dlink,dir-1960-a1|\ + dlink,dir-2640-a1|\ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 6f9fadbc..a4d67702 100644 +index c5708838..01b9b94c 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -32,6 +32,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { +@@ -33,6 +33,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { -- D-Link diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch index 205f61c..13e619e 100644 --- a/patches/targets-bcm2711-raspberry-pi-4.patch +++ b/patches/targets-bcm2711-raspberry-pi-4.patch @@ -14,10 +14,10 @@ index 00000000..90420dd0 + }, +}) diff --git a/targets/targets.mk b/targets/targets.mk -index 346377ea..e9674f85 100644 +index 3a885f22..77940da5 100644 --- a/targets/targets.mk +++ b/targets/targets.mk -@@ -25,5 +25,6 @@ $(eval $(call GluonTarget,x86,64)) +@@ -26,5 +26,6 @@ $(eval $(call GluonTarget,x86,64)) ifneq ($(BROKEN),) $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index c80930e..754adb7 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index be2e2152..4bc21763 100644 +index c5708838..d3f83da2 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,14 +13,7 @@ index be2e2152..4bc21763 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -149,9 +159,21 @@ device('zyxel-nwa55axe', 'zyxel_nwa55axe', { - broken = true, -- Missing LED / Reset button - }) - -+device('zyxel-wsm20', 'zyxel_wsm20', { -+ factory = false, -+}) -+ +@@ -156,6 +160,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN @@ -31,6 +24,7 @@ index be2e2152..4bc21763 100644 + factory = false, + packages = {'-hostapd-mini'}, +}) ++ + -- Ubiquiti From 2ac8620f134308a5ef0f08f903e58dd256fb4765 Mon Sep 17 00:00:00 2001 From: FFAC Date: Sat, 30 Sep 2023 13:26:12 +0000 Subject: [PATCH 096/129] add devices.json output, add unifi-6lr (v2, v3), fix building BROKEN --- Makefile | 1 + patches/targets-mediatek-mt7622.patch | 12 ++++++++++-- site.mk | 6 +++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 2dbd0f7..d4bbcb6 100644 --- a/Makefile +++ b/Makefile @@ -152,6 +152,7 @@ build: gluon-prepare output-clean echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \ cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \ fi + cat $(GLUON_BUILD_DIR)/openwrt/bin/targets/*/*/profiles.json | jq -s > output/devices.json ifndef GLUON_DEVICES $(eval PACKAGES_BRANCH := $(subst OPENWRT_BRANCH=openwrt,packages,$(shell cat $(GLUON_BUILD_DIR)/modules | grep OPENWRT_BRANCH))) mkdir -p output/packages/$(PACKAGES_BRANCH) diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch index f93b10a..41c604a 100644 --- a/patches/targets-mediatek-mt7622.patch +++ b/patches/targets-mediatek-mt7622.patch @@ -1,11 +1,19 @@ diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622 -index 8376c397..e93f95f4 100644 +index 8376c397..5c75ac21 100644 --- a/targets/mediatek-mt7622 +++ b/targets/mediatek-mt7622 -@@ -11,6 +11,14 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', { +@@ -11,6 +11,22 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', { manifest_aliases = {'ubiquiti-unifi-6-lr'}, }) ++device('ubiquiti-unifi-6-lr-v2', 'ubnt_unifi-6-lr-v2', { ++ factory = false, ++}) ++ ++device('ubiquiti-unifi-6-lr-v3', 'ubnt_unifi-6-lr-v3', { ++ factory = false, ++}) ++ + +-- Netgear + diff --git a/site.mk b/site.mk index 1e1d327..d9c2f0a 100644 --- a/site.mk +++ b/site.mk @@ -49,15 +49,15 @@ GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= ) # Build everything by default ifeq ($(BROKEN),0) - override BROKEN := +override BROKEN := else - BROKEN := 1 +export BROKEN := 1 endif GLUON_DEPRECATED := upgrade GLUON_OUTPUTDIR := ${GLUON_SITEDIR}/output ifdef GLUON_DEVICES - GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices +GLUON_OUTPUTDIR := $(GLUON_SITEDIR)/devices endif GLUON_PACKAGEDIR := $(GLUON_OUTPUTDIR)/packages/modules From 2a9a263dc146bcc861c2fdb6272ad80f912239f6 Mon Sep 17 00:00:00 2001 From: FFAC Date: Sat, 30 Sep 2023 14:05:42 +0000 Subject: [PATCH 097/129] make update-patches --- patches/010-primary-mac.patch | 2 +- patches/add-covr-x1860.patch | 12 ++++++------ patches/targets-ramips-mt7621.patch | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch index c008a9c..74c385d 100644 --- a/patches/010-primary-mac.patch +++ b/patches/010-primary-mac.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index e0b919f3..e56675e3 100755 +index 9f92b5b2..5e8c5c1b 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac @@ -81,6 +81,8 @@ local primary_addrs = { diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index 46c5440..f4cdd67 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -891,7 +891,7 @@ index 00000000..a84b7335 +++)"; diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch new file mode 100644 -index 00000000..9f40638e +index 00000000..263f2408 --- /dev/null +++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch @@ -0,0 +1,319 @@ @@ -1108,7 +1108,7 @@ index 00000000..9f40638e ++ }; ++}; +diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -+index fa4c83dbe18db3c5978c755695caf519327e89f4..787b0fd6c647579459b5ac3af97d3b4d150fd571 100644 ++index 962d7ef44017d1ead2a44eb67cac041220709ca4..e3799e9319404297bc1faf945dab83117b6d9499 100644 +--- a/target/linux/ramips/image/mt7621.mk ++++ b/target/linux/ramips/image/mt7621.mk +@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621 @@ -1126,7 +1126,7 @@ index 00000000..9f40638e + define Build/arcadyan-trx + echo -ne "hsqs" > $@.hsqs + $(eval trx_magic=$(word 1,$(1))) -+@@ -569,6 +577,31 @@ define Device/cudy_x6-v2 ++@@ -581,6 +589,31 @@ define Device/cudy_x6-v2 + endef + TARGET_DEVICES += cudy_x6-v2 + @@ -1159,10 +1159,10 @@ index 00000000..9f40638e + DEVICE_VENDOR := D-Link + DEVICE_MODEL := DAP-1620 +diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+index 6057c171922e9861b0928b16352970eaadd54cb1..bc7a05e2fe7541eaa2d78b14f4b66b24e67ca72b 100644 ++index 11a7c9465a333ee69b62f59f5e8fd6035c42f51b..feb2a196f582c7a49ae074ce2f387e40a3c8c102 100644 +--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network ++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+@@ -92,6 +92,9 @@ ramips_setup_interfaces() ++@@ -93,6 +93,9 @@ ramips_setup_interfaces() + zyxel,nt7101) + ucidef_set_interfaces_lan_wan "lan" "wan" + ;; @@ -1172,7 +1172,7 @@ index 00000000..9f40638e + gnubee,gb-pc1) + ucidef_set_interface_lan "ethblack ethblue" + ;; -+@@ -186,6 +189,11 @@ ramips_setup_macs() ++@@ -197,6 +200,11 @@ ramips_setup_macs() + lan_mac=$wan_mac + label_mac=$wan_mac + ;; diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index 754adb7..d2175bd 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index c5708838..d3f83da2 100644 +index 01b9b94c..c9dd2e65 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,7 +13,7 @@ index c5708838..d3f83da2 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -156,6 +160,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -162,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN From 0efdaa6501d6514233788046bc3df0a7de1cba5f Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 8 Oct 2023 00:25:17 +0200 Subject: [PATCH 098/129] fixes for building v2023.2.x --- contrib/genpkglist.py | 39 +++++++++++++++----------------- patches/targets-ath79-nand.patch | 5 ++-- site.mk | 26 +++++++++++++++------ 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index 07dc00f..f72ebc3 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -192,7 +192,7 @@ def render(self): # package assignment # -targets.get('ath79-generic'). \ +targets['ath79-generic']. \ add_pkglist(PKGS_TLS). \ include([ # 7M usable firmware space + USB port 'devolo-wifi-pro-1750e', @@ -212,19 +212,20 @@ def render(self): ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ exclude([ 'd-link-dir825b1', - 'tp-link-re355-v1', - 'tp-link-re450-v1' + 'tp-link-archer-c58-v1', + 'tp-link-archer-c25-v1', + 'tp-link-archer-c2-v3', ], pkglists=[PKGS_TLS]) -for target in ['ath79-nand', 'ipq40xx-generic', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7']: - targets.get(target). \ +for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']: + targets[target]. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_TLS) -targets.get('lantiq-xrx200'). \ +targets['lantiq-xrx200']. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ @@ -234,12 +235,12 @@ def render(self): 'avm-fritz-box-7412', 'tp-link-td-w8970', 'tp-link-td-w8980' - ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) + ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE, PKGS_TLS]) -targets.get('mpc85xx-p1020').add_pkglist(PKGS_TLS) +targets['mpc85xx-p1020'].add_pkglist(PKGS_TLS) for target in ['bcm27xx-bcm2708', 'bcm27xx-bcm2709', 'bcm27xx-bcm2710', 'bcm27xx-bcm2711']: - targets.get(target). \ + targets[target]. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ @@ -247,7 +248,7 @@ def render(self): add_pkglist(PKGS_USB_HID). \ add_pkglist(PKGS_TLS) -targets.get('mediatek-mt7622'). \ +targets['mediatek-mt7622']. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ @@ -256,7 +257,7 @@ def render(self): exclude([ # devices without usb ports 'ubiquiti-unifi-6-lr-v1'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) -targets.get('ramips-mt7621'). \ +targets['ramips-mt7621']. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ @@ -267,7 +268,7 @@ def render(self): 'ubiquiti-edgerouter-x', 'ubiquiti-edgerouter-x-sfp'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) -targets.get('ramips-mt7620'). \ +targets['ramips-mt7620']. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ @@ -276,30 +277,26 @@ def render(self): exclude([ # devices without usb ports 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) -targets.get('ramips-mt76x8'). \ +targets['ramips-mt76x8']. \ add_pkglist(PKGS_TLS). \ include([ # 7M usable firmware space + USB port 'gl-mt300n-v2', 'gl.inet-microuter-n300', 'netgear-r6120', - 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ - exclude([ - 'tp-link-re305' - ], pkglists=[PKGS_TLS]) + 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) for target in ['x86-64', 'x86-generic', 'x86-geode']: - targets.get(target). \ + targets[target]. \ add_pkglist(PKGS_USB). \ add_pkglist(PKGS_USB_NET). \ add_pkglist(PKGS_USB_SERIAL). \ add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_PCI). \ add_pkglist(PKGS_PCI_NET). \ - add_pkglist(PKGS_VIRT). \ add_pkglist(PKGS_TLS) -targets.get('x86-64').add_pkglist(PKGS_VIRT) -targets.get('x86-legacy').add_pkglist(PKGS_TLS) +targets['x86-64'].add_pkglist(PKGS_VIRT) +targets['x86-legacy'].add_pkglist(PKGS_TLS) if __name__ == '__main__': for pkglist in pkglists: diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch index d656aee..96569b5 100644 --- a/patches/targets-ath79-nand.patch +++ b/patches/targets-ath79-nand.patch @@ -1,14 +1,15 @@ diff --git a/targets/ath79-nand b/targets/ath79-nand -index 68bffa4e..ecf712b2 100644 +index 68bffa4e..ed6907d0 100644 --- a/targets/ath79-nand +++ b/targets/ath79-nand -@@ -62,6 +62,11 @@ device('zte-mf281', 'zte_mf281', { +@@ -62,6 +62,12 @@ device('zte-mf281', 'zte_mf281', { packages = ATH10K_PACKAGES_QCA9888, }) +device('zte-mf286r', 'zte_mf286r', { + broken = true, -- case must be opened to install + packages = ATH10K_PACKAGES_QCA9888, ++ factory = false, +}) + diff --git a/site.mk b/site.mk index d9c2f0a..43c6183 100644 --- a/site.mk +++ b/site.mk @@ -218,8 +218,9 @@ ifeq ($(GLUON_TARGET),ath79-generic) GLUON_tp-link-tl-wr1043nd-v4_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_tp-link-tl-wr1043n-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_d-link-dir825b1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-re355-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-re450-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS) endif # no pkglists for target ath79-mikrotik @@ -255,8 +256,10 @@ ifeq ($(GLUON_TARGET),ipq40xx-generic) endif -# no pkglists for target ipq40xx-mikrotik +ifeq ($(GLUON_TARGET),ipq40xx-mikrotik) + GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) +endif ifeq ($(GLUON_TARGET),ipq806x-generic) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) @@ -266,9 +269,9 @@ endif ifeq ($(GLUON_TARGET),lantiq-xrx200) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) endif ifeq ($(GLUON_TARGET),lantiq-xway) @@ -276,6 +279,11 @@ ifeq ($(GLUON_TARGET),lantiq-xway) endif +ifeq ($(GLUON_TARGET),mediatek-filogic) + GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + +endif + ifeq ($(GLUON_TARGET),mediatek-mt7622) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) @@ -318,7 +326,11 @@ ifeq ($(GLUON_TARGET),ramips-mt76x8) GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-re305_SITE_PACKAGES += $(EXCLUDE_TLS) +endif + +ifeq ($(GLUON_TARGET),realtek-rtl838x) + GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + endif ifeq ($(GLUON_TARGET),rockchip-armv8) From d82b02cbf9beb5c0eef4171bb6ddf0b9995f78fc Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 8 Oct 2023 08:54:18 +0200 Subject: [PATCH 099/129] remove TLS from devices instead of disabling them --- contrib/genpkglist.py | 22 ++++- patches/targets-ath79-generic.patch | 91 +-------------------- patches/targets-lantiq-xrx200-devices.patch | 13 +-- patches/targets-ramips-mt7620.patch | 53 ------------ patches/targets-ramips-mt76x8.patch | 15 ---- site.mk | 20 ++++- 6 files changed, 43 insertions(+), 171 deletions(-) delete mode 100644 patches/targets-ramips-mt7620.patch delete mode 100644 patches/targets-ramips-mt76x8.patch diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index f72ebc3..faea2fc 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -215,6 +215,18 @@ def render(self): 'tp-link-archer-c58-v1', 'tp-link-archer-c25-v1', 'tp-link-archer-c2-v3', + 'tp-link-archer-c6-v2-eu-ru-jp', + 'tp-link-cpe210-v1', + 'tp-link-cpe210-v2', + 'tp-link-cpe210-v3', + 'tp-link-cpe220-v3', + 'tp-link-cpe510-v1', + 'tp-link-cpe510-v2', + 'tp-link-cpe510-v3', + 'tp-link-tl-wr902ac-v1', + 'tp-link-wbs210-v1', + 'tp-link-wbs210-v2', + 'tp-link-wbs510-v1', ], pkglists=[PKGS_TLS]) for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']: @@ -275,7 +287,9 @@ def render(self): add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_TLS). \ exclude([ # devices without usb ports - 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) + 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ + exclude([ # low firmware space + 'netgear-ex3700', 'nexx-wt3020-8m', 'tp-link-archer-c2-v1', 'tp-link-archer-c20-v1', 'tp-link-archer-c20i', 'tp-link-archer-c50-v1'], pkglists=[PKGS_TLS]) targets['ramips-mt76x8']. \ add_pkglist(PKGS_TLS). \ @@ -283,7 +297,11 @@ def render(self): 'gl-mt300n-v2', 'gl.inet-microuter-n300', 'netgear-r6120', - 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) + 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ + exclude([ # low firmware space + 'netgear-r6020'], pkglists=[PKGS_TLS]) + + for target in ['x86-64', 'x86-generic', 'x86-geode']: targets[target]. \ diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 9c1eebd..5a4bf09 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,56 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index aafcb22f..7db926b3 100644 +index aafcb22f..608057f5 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -405,13 +405,6 @@ device('tp-link-archer-c58-v1', 'tplink_archer-c58-v1', { - class = 'tiny', -- 64M ath9k + ath10k - }) - --device('tp-link-archer-c6-v2-eu-ru-jp', 'tplink_archer-c6-v2', { -- packages = ATH10K_PACKAGES_QCA9888, -- manifest_aliases = { -- 'tp-link-archer-c6-v2', -- Upgrade from OpenWrt 19.07 -- }, --}) -- - device('tp-link-archer-c7-v2', 'tplink_archer-c7-v2', { - packages = ATH10K_PACKAGES_QCA9880, - }) -@@ -434,33 +427,7 @@ device('tp-link-archer-d50-v1', 'tplink_archer-d50-v1', { - broken = true, -- 64M ath9k + ath10k & power LED not working - }) - --device('tp-link-cpe210-v1', 'tplink_cpe210-v1', { -- manifest_aliases = { -- 'tp-link-cpe210-v1.0', -- Upgrade from OpenWrt 19.07 -- 'tp-link-cpe210-v1.1', -- Upgrade from OpenWrt 19.07 -- }, --}) --device('tp-link-cpe210-v2', 'tplink_cpe210-v2', { -- manifest_aliases = { -- 'tp-link-cpe210-v2.0', -- Upgrade from OpenWrt 19.07 -- }, --}) --device('tp-link-cpe210-v3', 'tplink_cpe210-v3', { -- manifest_aliases = { -- 'tp-link-cpe210-v3.0', -- Upgrade from OpenWrt 19.07 -- 'tp-link-cpe210-v3.1', -- Upgrade from OpenWrt 19.07 -- 'tp-link-cpe210-v3.20', -- Upgrade from OpenWrt 19.07 -- }, --}) - device('tp-link-cpe220-v3', 'tplink_cpe220-v3') --device('tp-link-cpe510-v1', 'tplink_cpe510-v1', { -- manifest_aliases = { -- 'tp-link-cpe510-v1.0', -- upgrade from OpenWrt 19.07 -- 'tp-link-cpe510-v1.1', -- upgrade from OpenWrt 19.07 -- }, --}) --device('tp-link-cpe510-v2', 'tplink_cpe510-v2') --device('tp-link-cpe510-v3', 'tplink_cpe510-v3') - - device('tp-link-cpe710-v1', 'tplink_cpe710-v1') - -@@ -468,6 +435,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -61,44 +13,7 @@ index aafcb22f..7db926b3 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -480,11 +451,11 @@ device('tp-link-tl-wr842n-v3', 'tplink_tl-wr842n-v3', { - }, - }) - --device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { -- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, -- broken = true, -- OOM with 5GHz enabled in most environments -- class = 'tiny', -- 64M ath9k + ath10k --}) -+-- device('tp-link-tl-wr902ac-v1', 'tplink_tl-wr902ac-v1', { -+-- packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9887, -+-- broken = true, -- OOM with 5GHz enabled in most environments -+-- class = 'tiny', -- 64M ath9k + ath10k -+-- }) - - device('tp-link-tl-wr1043nd-v2', 'tplink_tl-wr1043nd-v2', { - manifest_aliases = { -@@ -503,19 +474,6 @@ device('tp-link-tl-wr1043nd-v4', 'tplink_tl-wr1043nd-v4', { - }) - device('tp-link-tl-wr1043n-v5', 'tplink_tl-wr1043n-v5') - --device('tp-link-wbs210-v1', 'tplink_wbs210-v1', { -- manifest_aliases = { -- 'tp-link-wbs210-v1.20', -- upgrade from OpenWrt 19.07 -- }, --}) -- --device('tp-link-wbs210-v2', 'tplink_wbs210-v2') -- --device('tp-link-wbs510-v1', 'tplink_wbs510-v1', { -- manifest_aliases = { -- 'tp-link-wbs510-v1.20', -- upgrade from OpenWrt 19.07 -- }, --}) - - -- Ubiquiti - -@@ -581,3 +539,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index 2cccbd7..0a6ddf1 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -58,7 +58,7 @@ index 00000000..9b7a21f9 + caldata_extract_ubi "caldata" 0x1000 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index f54cd87f..57d974cb 100644 +index f54cd87f..80f0659d 100644 --- a/targets/lantiq-xrx200 +++ b/targets/lantiq-xrx200 @@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', { @@ -83,14 +83,3 @@ index f54cd87f..57d974cb 100644 device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { factory = false, aliases = {'o2-box-6431'}, -@@ -59,10 +67,6 @@ device('arcadyan-vgv7510kw22', 'arcadyan_vgv7510kw22-nor', { - -- used as WAN ports. Clients connected to these - -- ports will be connected to your private network. - --device('tp-link-td-w8970', 'tplink_tdw8970', { -- factory = false, --}) -- - device('tp-link-td-w8980', 'tplink_tdw8980', { - factory = false, - aliases = {'tp-link-td-w9980'}, diff --git a/patches/targets-ramips-mt7620.patch b/patches/targets-ramips-mt7620.patch deleted file mode 100644 index 7351137..0000000 --- a/patches/targets-ramips-mt7620.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/targets/ramips-mt7620 b/targets/ramips-mt7620 -index fbf57ba8..de1861a0 100644 ---- a/targets/ramips-mt7620 -+++ b/targets/ramips-mt7620 -@@ -19,48 +19,6 @@ device('gl-mt750', 'glinet_gl-mt750', { - factory = false, - }) - ---- Netgear -- --device('netgear-ex3700', 'netgear_ex3700', { -- aliases = { -- 'netgear-ex3800', -- }, -- manifest_aliases = {'netgear-ex3700-ex3800'}, -- factory_ext = '.chk', --}) -- ---- Nexx -- --device('nexx-wt3020-8m', 'nexx_wt3020-8m', { -- aliases = { -- 'nexx-wt3020ad', -- 'nexx-wt3020f', -- 'nexx-wt3020h', -- }, --}) -- ---- TP-Link -- --local tplink_region_suffix = '' --if (env.GLUON_REGION or '') ~= '' then -- tplink_region_suffix = '-' .. env.GLUON_REGION --end -- --device('tp-link-archer-c2-v1', 'tplink_archer-c2-v1', { -- factory = false, --}) -- --device('tp-link-archer-c20-v1', 'tplink_archer-c20-v1', { -- factory = false, --}) -- --device('tp-link-archer-c20i', 'tplink_archer-c20i') -- --device('tp-link-archer-c50-v1', 'tplink_archer-c50-v1', { -- factory = '-squashfs-factory' .. tplink_region_suffix, -- manifest_aliases = {'tp-link-archer-c50'}, --}) -- - - -- Xiaomi - diff --git a/patches/targets-ramips-mt76x8.patch b/patches/targets-ramips-mt76x8.patch deleted file mode 100644 index 9d4ad12..0000000 --- a/patches/targets-ramips-mt76x8.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/targets/ramips-mt76x8 b/targets/ramips-mt76x8 -index 1e27ac35..10ef9d65 100644 ---- a/targets/ramips-mt76x8 -+++ b/targets/ramips-mt76x8 -@@ -20,10 +20,6 @@ device('gl.inet-vixmini', 'glinet_vixmini', { - - -- Netgear - --device('netgear-r6020', 'netgear_r6020', { -- factory_ext = '.img', --}) -- - device('netgear-r6120', 'netgear_r6120', { - factory_ext = '.img', - }) diff --git a/site.mk b/site.mk index 43c6183..ca7d3b7 100644 --- a/site.mk +++ b/site.mk @@ -221,6 +221,18 @@ ifeq ($(GLUON_TARGET),ath79-generic) GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe220-v3_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe510-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe510-v2_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-cpe510-v3_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-tl-wr902ac-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS) endif # no pkglists for target ath79-mikrotik @@ -308,7 +320,12 @@ endif ifeq ($(GLUON_TARGET),ramips-mt7620) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_nexx-wt3020-8m_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c2-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c20-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c20i_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-c50-v1_SITE_PACKAGES += $(EXCLUDE_TLS) endif ifeq ($(GLUON_TARGET),ramips-mt7621) @@ -326,6 +343,7 @@ ifeq ($(GLUON_TARGET),ramips-mt76x8) GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + GLUON_netgear-r6020_SITE_PACKAGES += $(EXCLUDE_TLS) endif ifeq ($(GLUON_TARGET),realtek-rtl838x) From 65526ee6d1d22820d2b50423d4baaea3696d8ab0 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 9 Oct 2023 11:47:41 +0200 Subject: [PATCH 100/129] remove TLS from some ath79-generic devices fix too large output binary --- contrib/genpkglist.py | 5 +++++ site.mk | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index faea2fc..6720c74 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -216,6 +216,7 @@ def render(self): 'tp-link-archer-c25-v1', 'tp-link-archer-c2-v3', 'tp-link-archer-c6-v2-eu-ru-jp', + 'tp-link-archer-d50-v1', 'tp-link-cpe210-v1', 'tp-link-cpe210-v2', 'tp-link-cpe210-v3', @@ -227,6 +228,10 @@ def render(self): 'tp-link-wbs210-v1', 'tp-link-wbs210-v2', 'tp-link-wbs510-v1', + 'ubiquiti-nanostation-m-xw', + 'ubiquiti-nanobeam-m5-xw', + 'ubiquiti-nanostation-loco-m-xw', + 'ubiquiti-unifi-ap', ], pkglists=[PKGS_TLS]) for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']: diff --git a/site.mk b/site.mk index ca7d3b7..3382c47 100644 --- a/site.mk +++ b/site.mk @@ -222,6 +222,7 @@ ifeq ($(GLUON_TARGET),ath79-generic) GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_tp-link-archer-d50-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS) @@ -233,6 +234,10 @@ ifeq ($(GLUON_TARGET),ath79-generic) GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_ubiquiti-nanostation-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_ubiquiti-nanobeam-m5-xw_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_ubiquiti-nanostation-loco-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS) + GLUON_ubiquiti-unifi-ap_SITE_PACKAGES += $(EXCLUDE_TLS) endif # no pkglists for target ath79-mikrotik From 57c208fb6cd74200ddd2147c92b4ae80e3c17124 Mon Sep 17 00:00:00 2001 From: FFAC Date: Mon, 16 Oct 2023 21:40:27 +0000 Subject: [PATCH 101/129] add FR3000, FR1750e, Xiaomi AX3600, EAP225v3 --- patches/targets-ath79-generic.patch | 22 +++++++++++++++++++--- patches/targets-ipq40xx-generic.patch | 16 ++++++++++++++-- patches/targets-qualcommax.patch | 19 +++++++++++++++++++ 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 patches/targets-qualcommax.patch diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 5a4bf09..29e2160 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,11 +1,27 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index aafcb22f..608057f5 100644 +index aafcb22f..cd697d80 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -468,6 +468,10 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -57,6 +57,10 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', { + factory = false, + }) + ++device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', { ++ factory = false, ++}) ++ + -- Buffalo + + device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h') +@@ -468,6 +472,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) ++device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { ++ factory = false, ++ packages = ATH10K_PACKAGES_QCA9888, ++}) ++ +device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', { + packages = ATH10K_PACKAGES_QCA9888, +}) @@ -13,7 +29,7 @@ index aafcb22f..608057f5 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -581,3 +585,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -581,3 +594,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 1cad386..9e386c0 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,8 +1,20 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index b6a49ca7..96765dc1 100644 +index b6a49ca7..cf281a4b 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -73,6 +73,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -57,6 +57,11 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { + factory = false, + }) + ++device('avm-fritz-repeater-3000', 'avm_fritzrepeater-3000', { ++ factory = false, ++}) ++ ++ + + -- GL.iNet + +@@ -73,6 +78,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') diff --git a/patches/targets-qualcommax.patch b/patches/targets-qualcommax.patch new file mode 100644 index 0000000..efc020f --- /dev/null +++ b/patches/targets-qualcommax.patch @@ -0,0 +1,19 @@ +diff --git a/targets/qualcommax-ipq807x b/targets/qualcommax-ipq807x +new file mode 100644 +index 00000000..5d70778b +--- /dev/null ++++ b/targets/qualcommax-ipq807x +@@ -0,0 +1,3 @@ ++device('xiaomi-ax3600', 'xiaomi_ax3600', { ++ broken = true, ++}) +diff --git a/targets/targets.mk b/targets/targets.mk +index 77940da5..9afa5510 100644 +--- a/targets/targets.mk ++++ b/targets/targets.mk +@@ -28,4 +28,5 @@ ifneq ($(BROKEN),) + $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested + $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested + $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support ++$(eval $(call GluonTarget,qualcommax,ipq807x)) # BROKEN: Untested + endif From 867db0a67abc36f9a0497031798c366cf8f8a740 Mon Sep 17 00:00:00 2001 From: FFAC Date: Mon, 16 Oct 2023 23:19:07 +0000 Subject: [PATCH 102/129] Fixups add target to targets.mk rename target qualcommax-ipq807x (master) to ipq807x-generic (release) remove third radio from Fritz!Repeater 3000 and Xiaomi AX3600 add master patch to improve support for Fritz!Repeater 3000 improve support for Linksys EA/MR8300 and Meraki MR33: switch to default packages: ath10k instead of ath10k-ct add QCA9880 packages for Fritz!Repeater 1750e (smallbuffers) mark the three new devices as broken and one as class tiny --- patches/targets-ath79-generic.patch | 11 +-- patches/targets-bcm2711-raspberry-pi-4.patch | 11 --- patches/targets-ipq40xx-generic.patch | 70 +++++++++++++++++++- patches/targets-ipq807x-generic.patch | 30 +++++++++ patches/targets-mk.patch | 12 ++++ patches/targets-qualcommax.patch | 19 ------ targets.mk | 1 + 7 files changed, 117 insertions(+), 37 deletions(-) create mode 100644 patches/targets-ipq807x-generic.patch create mode 100644 patches/targets-mk.patch delete mode 100644 patches/targets-qualcommax.patch diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 29e2160..bbadb62 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,19 +1,22 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index aafcb22f..cd697d80 100644 +index aafcb22f..71457772 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -57,6 +57,10 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', { +@@ -57,6 +57,13 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', { factory = false, }) +device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', { ++ packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, + factory = false, ++ broken = true, -- OOM with 5GHz enabled in most environments ++ class = 'tiny', -- 64M ath9k + ath10k +}) + -- Buffalo device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h') -@@ -468,6 +472,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -468,6 +475,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -29,7 +32,7 @@ index aafcb22f..cd697d80 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -581,3 +594,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -581,3 +597,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch index 13e619e..8ca4f48 100644 --- a/patches/targets-bcm2711-raspberry-pi-4.patch +++ b/patches/targets-bcm2711-raspberry-pi-4.patch @@ -13,14 +13,3 @@ index 00000000..90420dd0 + 'raspberry-pi-4-model-b-rev-1.4', + }, +}) -diff --git a/targets/targets.mk b/targets/targets.mk -index 3a885f22..77940da5 100644 ---- a/targets/targets.mk -+++ b/targets/targets.mk -@@ -26,5 +26,6 @@ $(eval $(call GluonTarget,x86,64)) - - ifneq ($(BROKEN),) - $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested -+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested - $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support - endif diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 9e386c0..8239c37 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,25 +1,72 @@ +diff --git a/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch +new file mode 100644 +index 00000000..dad7e10b +--- /dev/null ++++ b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch +@@ -0,0 +1,24 @@ ++From: Alexander Friese ++Date: Wed, 12 Jul 2023 16:46:01 +0200 ++Subject: ipq4019: fix support for AVM FRITZ!Repeater 3000 ++ ++new versions of the device have NAND with 8bit ECC ++which was not yet supported before. This change removes ++ECC restrictions. ++ ++Signed-off-by: Alexander Friese ++ ++diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts ++index 41dec72542421d8b2228e3f0432460e75bbcc329..8d88bc1521109f5469a0a7ce893af4b92b4f39ed 100644 ++--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts +++++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts ++@@ -121,9 +121,6 @@ ++ status = "okay"; ++ ++ nand@0 { ++- /delete-property/ nand-ecc-strength; ++- /delete-property/ nand-ecc-step-size; ++- ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index b6a49ca7..cf281a4b 100644 +index b6a49ca7..8ddddcd2 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -57,6 +57,11 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { +@@ -57,6 +57,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { factory = false, }) +device('avm-fritz-repeater-3000', 'avm_fritzrepeater-3000', { + factory = false, ++ packages = { -- exclude until Gluon supports third radio ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', ++ '-ath10k-firmware-qca9984-ct', ++ '-ath10k-board-qca9984', ++ }, ++ broken = true, ++ -- 3rd WiFi radio not supported (5GHz DFS channels 100+) ++ -- outdoor mode is broken due to 5GHz being limited to channels 36-64 +}) + + -- GL.iNet -@@ -73,6 +78,26 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -73,6 +90,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') +device('linksys-ea8300-dallas', 'linksys_ea8300', { + packages = { -- exclude until Gluon supports third radio ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', + '-ath10k-firmware-qca9888-ct', + '-ath10k-board-qca9888', + }, @@ -30,6 +77,11 @@ index b6a49ca7..cf281a4b 100644 + +device('linksys-mr8300-dallas', 'linksys_mr8300', { + packages = { -- exclude until Gluon supports third radio ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', + '-ath10k-firmware-qca9888-ct', + '-ath10k-board-qca9888', + }, @@ -41,3 +93,15 @@ index b6a49ca7..cf281a4b 100644 -- Meraki +@@ -80,6 +127,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', { + packages = { + -- radio0 is monitoring radio - removed for now + -- the -ct firmware does not have working mesh ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', + '-ath10k-firmware-qca9887-ct', + '-ath10k-board-qca9887', + }, diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch new file mode 100644 index 0000000..6222fcd --- /dev/null +++ b/patches/targets-ipq807x-generic.patch @@ -0,0 +1,30 @@ +diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic +new file mode 100644 +index 00000000..28427b34 +--- /dev/null ++++ b/targets/ipq807x-generic +@@ -0,0 +1,24 @@ ++local ATH10K_PACKAGES_IPQ807X = { ++ -- default: candela tech driver ++} ++ ++ ++defaults { ++ packages = ATH10K_PACKAGES_IPQ807X, ++} ++ ++ ++-- Xiaomi ++ ++device('xiaomi-ax3600', 'xiaomi_ax3600', { ++ packages = { ++ -- radio0 is monitoring radio - removed for now ++ '-ath10k-firmware-qca9887-ct', ++ '-ath10k-board-qca9887', ++ '-kmod-ath10k-ct-smallbuffers', ++ '-kmod-ath10k-smallbuffers', ++ }, ++ broken = true, ++ -- 3rd WiFi radio not supported ++ -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k) ++}) diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch new file mode 100644 index 0000000..96ef7ad --- /dev/null +++ b/patches/targets-mk.patch @@ -0,0 +1,12 @@ +diff --git a/targets/targets.mk b/targets/targets.mk +index 3a885f22..544f252b 100644 +--- a/targets/targets.mk ++++ b/targets/targets.mk +@@ -26,5 +26,7 @@ $(eval $(call GluonTarget,x86,64)) + + ifneq ($(BROKEN),) + $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested ++$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested + $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support ++$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested + endif diff --git a/patches/targets-qualcommax.patch b/patches/targets-qualcommax.patch deleted file mode 100644 index efc020f..0000000 --- a/patches/targets-qualcommax.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/targets/qualcommax-ipq807x b/targets/qualcommax-ipq807x -new file mode 100644 -index 00000000..5d70778b ---- /dev/null -+++ b/targets/qualcommax-ipq807x -@@ -0,0 +1,3 @@ -+device('xiaomi-ax3600', 'xiaomi_ax3600', { -+ broken = true, -+}) -diff --git a/targets/targets.mk b/targets/targets.mk -index 77940da5..9afa5510 100644 ---- a/targets/targets.mk -+++ b/targets/targets.mk -@@ -28,4 +28,5 @@ ifneq ($(BROKEN),) - $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested - $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested - $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support -+$(eval $(call GluonTarget,qualcommax,ipq807x)) # BROKEN: Untested - endif diff --git a/targets.mk b/targets.mk index 9a61787..cf942e7 100644 --- a/targets.mk +++ b/targets.mk @@ -29,6 +29,7 @@ define GLUON_TARGETS += bcm27xx-bcm2710 bcm27xx-bcm2711 mvebu-cortexa9 +ipq807x-generic endef endif From e421884380ed82e4d783843edb7462c32b911e1a Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 17 Oct 2023 00:15:26 +0000 Subject: [PATCH 103/129] add support for new devices ZTE MF289F TP-Link Archer AX23 Ubiquiti UniFi nanoHD Mikrotik WAP AC (D2) Netgear WAX218 Google WiFi (Gale) add target ipq40xx-chromium --- patches/cellular.patch | 19 +++++++-- patches/targets-ipq40xx-chromium.patch | 25 ++++++++++++ patches/targets-ipq40xx-generic.patch | 41 +++++++++++++++++-- patches/targets-ipq40xx-mikrotik.patch | 56 ++++++++++++++++++++++++++ patches/targets-ipq807x-generic.patch | 9 ++++- patches/targets-mk.patch | 7 ++-- patches/targets-ramips-mt7621.patch | 24 ++++++++++- targets.mk | 3 +- 8 files changed, 168 insertions(+), 16 deletions(-) create mode 100644 patches/targets-ipq40xx-chromium.patch create mode 100644 patches/targets-ipq40xx-mikrotik.patch diff --git a/patches/cellular.patch b/patches/cellular.patch index dfe95b7..113c64d 100644 --- a/patches/cellular.patch +++ b/patches/cellular.patch @@ -1,8 +1,8 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -index 0099d1d8..98a21365 100755 +index 0099d1d8..7301eff2 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', { +@@ -49,10 +49,12 @@ if platform.match('ath79', 'nand', { setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) elseif platform.match('ath79', 'nand', { 'zte,mf281', @@ -10,11 +10,16 @@ index 0099d1d8..98a21365 100755 }) then setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15) elseif platform.match('ipq40xx', 'generic', { + 'glinet,gl-ap1300', ++ 'zte,mf289f', + }) then + setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) + elseif platform.match('ramips', 'mt7621', { diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index ba4b5b48..40728360 100644 +index ba4b5b48..78b51e05 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -@@ -75,6 +75,7 @@ end +@@ -75,11 +75,13 @@ end function M.is_cellular_device() if M.match('ath79', 'nand', { 'zte,mf281', @@ -22,3 +27,9 @@ index ba4b5b48..40728360 100644 'glinet,gl-xe300', }) then return true + elseif M.match('ipq40xx', 'generic', { + 'glinet,gl-ap1300', ++ 'zte,mf289f', + }) then + return true + elseif M.match('ramips', 'mt7621', { diff --git a/patches/targets-ipq40xx-chromium.patch b/patches/targets-ipq40xx-chromium.patch new file mode 100644 index 0000000..7d7a870 --- /dev/null +++ b/patches/targets-ipq40xx-chromium.patch @@ -0,0 +1,25 @@ +diff --git a/targets/ipq40xx-chromium b/targets/ipq40xx-chromium +new file mode 100644 +index 00000000..7dfa219b +--- /dev/null ++++ b/targets/ipq40xx-chromium +@@ -0,0 +1,19 @@ ++local ATH10K_PACKAGES_IPQ40XX = { ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', ++} ++ ++ ++defaults { ++ packages = ATH10K_PACKAGES_IPQ40XX, ++} ++ ++ ++-- Google ++ ++device('google-wifi-gale', 'google_wifi', { ++ broken = true, -- can only be flashed by opening the device, to enter devmode ++}) diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 8239c37..802b00f 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -29,10 +29,26 @@ index 00000000..dad7e10b + compatible = "fixed-partitions"; + #address-cells = <1>; diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index b6a49ca7..8ddddcd2 100644 +index b6a49ca7..68cb4d55 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic -@@ -57,6 +57,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { +@@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = { + 'ath10k-firmware-qca9888', + '-ath10k-firmware-qca9888-ct', + } ++local ATH10K_PACKAGES_IPQ40XX_QCA9984 = { ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', ++ 'ath10k-firmware-qca9984', ++ '-ath10k-firmware-qca9984-ct', ++} + + + defaults { +@@ -57,6 +66,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { factory = false, }) @@ -56,7 +72,7 @@ index b6a49ca7..8ddddcd2 100644 -- GL.iNet -@@ -73,6 +90,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -73,6 +99,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') @@ -93,7 +109,7 @@ index b6a49ca7..8ddddcd2 100644 -- Meraki -@@ -80,6 +127,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', { +@@ -80,6 +136,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', { packages = { -- radio0 is monitoring radio - removed for now -- the -ct firmware does not have working mesh @@ -105,3 +121,20 @@ index b6a49ca7..8ddddcd2 100644 '-ath10k-firmware-qca9887-ct', '-ath10k-board-qca9887', }, +@@ -120,6 +181,16 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', { + }) + + ++-- ZTE ++ ++device('zte-mf289f', 'zte_mf289f', { ++ packages = ATH10K_PACKAGES_IPQ40XX_QCA9984, ++ broken = true, -- case must be opened to install ++ -- only hw rev T2 was tested, hw rev T1 wasn't (implication: 5GHz was never verified for T1, everything else should be working) ++ factory = false, ++}) ++ ++ + -- ZyXEL + + device('zyxel-nbg6617', 'zyxel_nbg6617') diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch new file mode 100644 index 0000000..772ae11 --- /dev/null +++ b/patches/targets-ipq40xx-mikrotik.patch @@ -0,0 +1,56 @@ +diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +index ba4b5b48..52d9f1b1 100644 +--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua ++++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +@@ -26,6 +26,8 @@ function M.is_outdoor_device() + if M.match('ath79', 'generic', { + 'devolo,dvl1750x', + 'librerouter,librerouter-v1', ++ 'mikrotik,routerboard-wap-g-5hact2hnd', ++ 'mikrotik,wap-ac', + 'plasmacloud,pa300', + 'plasmacloud,pa300e', + 'tplink,cpe210-v1', +diff --git a/targets/ipq40xx-mikrotik b/targets/ipq40xx-mikrotik +index aed02b2a..eb08ef45 100644 +--- a/targets/ipq40xx-mikrotik ++++ b/targets/ipq40xx-mikrotik +@@ -1,6 +1,27 @@ + include 'mikrotik.inc' + +-local ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS = {} ++local ATH10K_PACKAGES_IPQ40XX = { ++ 'kmod-ath10k', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', ++} ++ ++-- enforce mainline ath10k-smallbuffers kmod, fixes 5GHz-OOM for low memory devices ++ ++local ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS = { ++ 'kmod-ath10k-smallbuffers', ++ '-kmod-ath10k-ct', ++ '-kmod-ath10k-ct-smallbuffers', ++ 'ath10k-firmware-qca4019', ++ '-ath10k-firmware-qca4019-ct', ++} ++ ++defaults { ++ packages = ATH10K_PACKAGES_IPQ40XX, ++} ++ + + device('mikrotik-hap-ac2', 'mikrotik_hap-ac2', { + packages = ATH10K_PACKAGES_IPQ40XX_SMALLBUFFERS, +@@ -10,3 +31,9 @@ device('mikrotik-sxtsq-5-ac-rbsxtsqg-5acd', 'mikrotik_sxtsq-5-ac', { + factory = false, + aliases = {'mikrotik-discg-5acd'}, + }) ++ ++device('mikrotik-wap-ac', 'mikrotik_wap-ac', { ++ aliases = {'mikrotik-routerboard-wap-g-5hacd2hnd'}, ++ aliases = {'mikrotik-routerboard-wap-ac-d2'}, ++ factory = false, ++}) diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch index 6222fcd..be90d59 100644 --- a/patches/targets-ipq807x-generic.patch +++ b/patches/targets-ipq807x-generic.patch @@ -1,9 +1,9 @@ diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic new file mode 100644 -index 00000000..28427b34 +index 00000000..aebb8dd9 --- /dev/null +++ b/targets/ipq807x-generic -@@ -0,0 +1,24 @@ +@@ -0,0 +1,29 @@ +local ATH10K_PACKAGES_IPQ807X = { + -- default: candela tech driver +} @@ -14,6 +14,11 @@ index 00000000..28427b34 +} + + ++-- Netgear ++ ++device('netgear-wax218', 'netgear_wax218') ++ ++ +-- Xiaomi + +device('xiaomi-ax3600', 'xiaomi_ax3600', { diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch index 96ef7ad..3adb047 100644 --- a/patches/targets-mk.patch +++ b/patches/targets-mk.patch @@ -1,12 +1,13 @@ diff --git a/targets/targets.mk b/targets/targets.mk -index 3a885f22..544f252b 100644 +index 3a885f22..52186339 100644 --- a/targets/targets.mk +++ b/targets/targets.mk -@@ -26,5 +26,7 @@ $(eval $(call GluonTarget,x86,64)) +@@ -26,5 +26,8 @@ $(eval $(call GluonTarget,x86,64)) ifneq ($(BROKEN),) $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested +$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested - $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support ++$(eval $(call GluonTarget,ipq40xx,chromium)) # BROKEN: Untested +$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested + $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support endif diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index d2175bd..ebe3f02 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 01b9b94c..c9dd2e65 100644 +index c5708838..3a2c1cd2 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,7 +13,27 @@ index 01b9b94c..c9dd2e65 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -162,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { + + -- TP-Link + ++device('tp-link-archer-ax23-v1', 'tplink_archer-ax23-v1') ++ + device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { + broken = true, -- LAN LED not working - review after resolving #2756 + }) +@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { + factory = false, + }) + ++device('ubiquiti-unifi-nanohd', 'ubnt_unifi-nanohd', { ++ factory = false, ++}) ++ + + -- Wavlink + +@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN diff --git a/targets.mk b/targets.mk index cf942e7..cff818a 100644 --- a/targets.mk +++ b/targets.mk @@ -28,8 +28,9 @@ ifneq ($(BROKEN),0) define GLUON_TARGETS += bcm27xx-bcm2710 bcm27xx-bcm2711 -mvebu-cortexa9 +ipq40xx-chromium ipq807x-generic +mvebu-cortexa9 endef endif From 774934e0e7eb6009c57c18041aae213c4a1f186c Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 17 Oct 2023 01:40:00 +0000 Subject: [PATCH 104/129] update-patches increase IDs of FFAC OpenWrt patches --- patches/cellular.patch | 4 ++-- patches/targets-ipq40xx-generic.patch | 12 ++++++++++++ patches/targets-ipq807x-generic.patch | 9 ++++++--- patches/targets-ramips-mt7621.patch | 8 ++++---- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/patches/cellular.patch b/patches/cellular.patch index 113c64d..5de730e 100644 --- a/patches/cellular.patch +++ b/patches/cellular.patch @@ -16,10 +16,10 @@ index 0099d1d8..7301eff2 100755 setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) elseif platform.match('ramips', 'mt7621', { diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index ba4b5b48..78b51e05 100644 +index 52d9f1b1..6b4b14ed 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -@@ -75,11 +75,13 @@ end +@@ -77,11 +77,13 @@ end function M.is_cellular_device() if M.match('ath79', 'nand', { 'zte,mf281', diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 802b00f..4d076b3 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -28,6 +28,18 @@ index 00000000..dad7e10b + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; +diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0008-procd-add-Dlink-sge-image.patch +similarity index 100% +rename from patches/openwrt/0007-procd-add-Dlink-sge-image.patch +rename to patches/openwrt/0008-procd-add-Dlink-sge-image.patch +diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0009-add-Dlink-COVR-X1860.patch +similarity index 100% +rename from patches/openwrt/0008-add-Dlink-COVR-X1860.patch +rename to patches/openwrt/0009-add-Dlink-COVR-X1860.patch +diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +similarity index 100% +rename from patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +rename to patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic index b6a49ca7..68cb4d55 100644 --- a/targets/ipq40xx-generic diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch index be90d59..eb31806 100644 --- a/patches/targets-ipq807x-generic.patch +++ b/patches/targets-ipq807x-generic.patch @@ -1,9 +1,9 @@ diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic new file mode 100644 -index 00000000..aebb8dd9 +index 00000000..08c5ab5f --- /dev/null +++ b/targets/ipq807x-generic -@@ -0,0 +1,29 @@ +@@ -0,0 +1,32 @@ +local ATH10K_PACKAGES_IPQ807X = { + -- default: candela tech driver +} @@ -16,7 +16,9 @@ index 00000000..aebb8dd9 + +-- Netgear + -+device('netgear-wax218', 'netgear_wax218') ++device('netgear-wax218', 'netgear_wax218', { ++ factory = false, ++}) + + +-- Xiaomi @@ -32,4 +34,5 @@ index 00000000..aebb8dd9 + broken = true, + -- 3rd WiFi radio not supported + -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k) ++ factory = false, +}) diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index ebe3f02..a8a5540 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index c5708838..3a2c1cd2 100644 +index 01b9b94c..630fd7ab 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,7 +13,7 @@ index c5708838..3a2c1cd2 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { +@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { -- TP-Link @@ -22,7 +22,7 @@ index c5708838..3a2c1cd2 100644 device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { broken = true, -- LAN LED not working - review after resolving #2756 }) -@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { +@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { factory = false, }) @@ -33,7 +33,7 @@ index c5708838..3a2c1cd2 100644 -- Wavlink -@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN From b5958d0dbeb40853475bcdf8d74aa806ed43b777 Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 24 Oct 2023 07:29:12 +0000 Subject: [PATCH 105/129] fix ssid-changer for new devices --- patches/ssid-changer.patch | 43 +++++++++++++++++++++++++++ patches/targets-ipq807x-generic.patch | 8 ++--- 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 patches/ssid-changer.patch diff --git a/patches/ssid-changer.patch b/patches/ssid-changer.patch new file mode 100644 index 0000000..a2389f9 --- /dev/null +++ b/patches/ssid-changer.patch @@ -0,0 +1,43 @@ +diff --git a/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch +new file mode 100644 +index 00000000..e920ea4e +--- /dev/null ++++ b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch +@@ -0,0 +1,37 @@ ++From: FFAC ++Date: Wed, 18 Oct 2023 11:41:27 +0000 ++Subject: try to fix ssid-changer for 23.05 devices ++ ++diff --git a/ffac-ssid-changer/shsrc/ssid-changer.sh b/ffac-ssid-changer/shsrc/ssid-changer.sh ++index f8b80fdb448e5e36093f8146f88c16ee0f2066de..4262e23b083cb5b51c3adb9be34f9c621bf08714 100755 ++--- a/ffac-ssid-changer/shsrc/ssid-changer.sh +++++ b/ffac-ssid-changer/shsrc/ssid-changer.sh ++@@ -10,7 +10,7 @@ safety_exit() { ++ pgrep -f autoupdater >/dev/null && safety_exit 'autoupdater running' ++ UT=$(sed 's/\..*//g' /proc/uptime) ++ [ $UT -gt 60 ] || safety_exit 'less than one minute' ++-[ $(find /var/run -name hostapd-phy* | wc -l) -gt 0 ] || safety_exit 'no hostapd-phy*' +++[ $(find /var/run -name hostapd-* | wc -l) -gt 0 ] || safety_exit 'no hostapd-*' ++ ++ # only once every timeframe minutes the SSID will change to the Offline-SSID ++ # (set to 1 minute to change immediately every time the router gets offline) ++@@ -120,8 +120,8 @@ HUP_NEEDED=0 ++ if [ "$CHECK" -gt 0 ] || [ "$DISABLED" = '1' ]; then ++ echo "node is online" ++ LOOP=1 ++- # check status for all physical devices ++- for HOSTAPD in $(ls /var/run/hostapd-phy*); do +++ # check status for all physical and wireless devices +++ for HOSTAPD in $(ls /var/run/hostapd-*); do ++ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')" ++ LOOP=$((LOOP+1)) ++ CURRENT_SSID="$(grep "^ssid=$ONLINE_SSID" $HOSTAPD | cut -d"=" -f2)" ++@@ -165,7 +165,7 @@ elif [ "$CHECK" -eq 0 ]; then ++ if [ $OFF_COUNT -ge $(($T / 2)) ]; then ++ # node was offline more times than half of switch_timeframe (or than $FIRST) ++ LOOP=1 ++- for HOSTAPD in $(ls /var/run/hostapd-phy*); do +++ for HOSTAPD in $(ls /var/run/hostapd-*); do ++ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')" ++ LOOP=$((LOOP+1)) ++ CURRENT_SSID="$(grep "^ssid=$OFFLINE_SSID" $HOSTAPD | cut -d"=" -f2)" diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch index eb31806..896bcf4 100644 --- a/patches/targets-ipq807x-generic.patch +++ b/patches/targets-ipq807x-generic.patch @@ -10,15 +10,15 @@ index 00000000..08c5ab5f + + +defaults { -+ packages = ATH10K_PACKAGES_IPQ807X, ++ packages = ATH10K_PACKAGES_IPQ807X +} + + +-- Netgear + -+device('netgear-wax218', 'netgear_wax218', { -+ factory = false, -+}) ++--device('netgear-wax218', 'netgear_wax218', { ++-- factory = false, ++--}) + + +-- Xiaomi From a60ac8c37c0bdf38c63218b8f47405b08425be60 Mon Sep 17 00:00:00 2001 From: FFAC Date: Thu, 26 Oct 2023 08:02:29 +0000 Subject: [PATCH 106/129] fix building wax218 --- patches/030-openwrt-ipq807x-initramfs.patch | 40 +++++++++++++++++++++ patches/targets-ipq807x-generic.patch | 10 +++--- 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 patches/030-openwrt-ipq807x-initramfs.patch diff --git a/patches/030-openwrt-ipq807x-initramfs.patch b/patches/030-openwrt-ipq807x-initramfs.patch new file mode 100644 index 0000000..23d9e9a --- /dev/null +++ b/patches/030-openwrt-ipq807x-initramfs.patch @@ -0,0 +1,40 @@ +diff --git a/patches/openwrt/0011-qualcommax-fix-wax218.patch b/patches/openwrt/0011-qualcommax-fix-wax218.patch +new file mode 100644 +index 00000000..b8ce5ca6 +--- /dev/null ++++ b/patches/openwrt/0011-qualcommax-fix-wax218.patch +@@ -0,0 +1,34 @@ ++From 02ed2b0271c5e17584884146649d7fb64a9ac35d Mon Sep 17 00:00:00 2001 ++From: Florian Maurer ++Date: Thu, 26 Oct 2023 08:40:59 +0200 ++Subject: [PATCH] qualcommax: only build initramfs if ++ CONFIG_TARGET_ROOTFS_INITRAMFS is set ++ ++Signed-off-by: Florian Maurer ++--- ++ target/linux/ipq807x/image/generic.mk | 4 +++- ++ 1 file changed, 3 insertions(+), 1 deletion(-) ++ ++diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk ++index 124cdfc3b2..fb991156d5 100644 ++--- a/target/linux/ipq807x/image/generic.mk +++++ b/target/linux/ipq807x/image/generic.mk ++@@ -80,15 +80,17 @@ TARGET_DEVICES += edimax_cax1800 ++ define Device/netgear_wax218 ++ $(call Device/FitImage) ++ $(call Device/UbiFit) ++- ARTIFACTS := web-ui-factory.fit ++ DEVICE_VENDOR := Netgear ++ DEVICE_MODEL := WAX218 ++ DEVICE_DTS_CONFIG := config@hk07 ++ BLOCKSIZE := 128k ++ PAGESIZE := 2048 ++ SOC := ipq8072 +++ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) +++ ARTIFACTS := web-ui-factory.fit ++ ARTIFACT/web-ui-factory.fit := append-image initramfs-uImage.itb | \ ++ ubinize-kernel | qsdk-ipq-factory-nand +++endif ++ DEVICE_PACKAGES := kmod-spi-gpio kmod-spi-bitbang kmod-gpio-nxp-74hc164 \ ++ ipq-wifi-netgear_wax218 ++ endef diff --git a/patches/targets-ipq807x-generic.patch b/patches/targets-ipq807x-generic.patch index 896bcf4..d5533bd 100644 --- a/patches/targets-ipq807x-generic.patch +++ b/patches/targets-ipq807x-generic.patch @@ -1,6 +1,6 @@ diff --git a/targets/ipq807x-generic b/targets/ipq807x-generic new file mode 100644 -index 00000000..08c5ab5f +index 00000000..efe50f5f --- /dev/null +++ b/targets/ipq807x-generic @@ -0,0 +1,32 @@ @@ -16,9 +16,9 @@ index 00000000..08c5ab5f + +-- Netgear + -+--device('netgear-wax218', 'netgear_wax218', { -+-- factory = false, -+--}) ++device('netgear-wax218', 'netgear_wax218', { ++ factory = false, ++}) + + +-- Xiaomi @@ -31,7 +31,7 @@ index 00000000..08c5ab5f + '-kmod-ath10k-ct-smallbuffers', + '-kmod-ath10k-smallbuffers', + }, -+ broken = true, ++ -- broken = true, + -- 3rd WiFi radio not supported + -- 3rd radio comes with smallbuffers (512MB RAM is not enough next to ath11k) + factory = false, From 19ef6a6552da538061ed70628483395496208e74 Mon Sep 17 00:00:00 2001 From: FFAC Date: Sun, 29 Oct 2023 11:10:17 +0000 Subject: [PATCH 107/129] fix opkg key folder creation --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d4bbcb6..4ba2c12 100644 --- a/Makefile +++ b/Makefile @@ -148,8 +148,9 @@ build: gluon-prepare output-clean echo ''Building target $$target''; \ $(GLUON_MAKE) download all GLUON_TARGET=$$target CONFIG_JSON_ADD_IMAGE_INFO=1; \ done - @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ]; then \ + @if [ ! -f "$(OPKG_KEY_FOLDER)/key-build" ] && [ -f "$(GLUON_BUILD_DIR)/openwrt/key-build" ]; then \ echo 'Copying new opkg keys to $(OPKG_KEY_FOLDER)'; \ + mkdir -p $(OPKG_KEY_FOLDER); \ cp $(GLUON_BUILD_DIR)/openwrt/key-build* $(OPKG_KEY_FOLDER)/; \ fi cat $(GLUON_BUILD_DIR)/openwrt/bin/targets/*/*/profiles.json | jq -s > output/devices.json From 5c2e34dedee23486219bb5c90032de0568245cf0 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Sun, 29 Oct 2023 20:34:10 +0100 Subject: [PATCH 108/129] add package for zyxel-nwa55axe --- contrib/genpkglist.py | 9 ++++++++- site.mk | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py index 6720c74..ed55d6b 100755 --- a/contrib/genpkglist.py +++ b/contrib/genpkglist.py @@ -188,6 +188,11 @@ def render(self): ]) pkglists.append(PKGS_TLS) +PKGS_NSM = PackageList('NSM', [ + 'ffda-network-setup-mode', +]) +pkglists.append(PKGS_NSM) + # # package assignment # @@ -280,10 +285,12 @@ def render(self): add_pkglist(PKGS_USB_SERIAL). \ add_pkglist(PKGS_USB_STORAGE). \ add_pkglist(PKGS_TLS). \ + include(['zyxel-nwa55axe'], pkglists=[PKGS_NSM]). \ exclude([ # devices without usb ports 'netgear-ex6150', 'ubiquiti-edgerouter-x', - 'ubiquiti-edgerouter-x-sfp'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) + 'ubiquiti-edgerouter-x-sfp', + 'zyxel-nwa55axe'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) targets['ramips-mt7620']. \ add_pkglist(PKGS_USB). \ diff --git a/site.mk b/site.mk index 3382c47..0d19d2c 100644 --- a/site.mk +++ b/site.mk @@ -200,6 +200,12 @@ EXCLUDE_TLS := \ -libustream-openssl \ -openssh-sftp-server +INCLUDE_NSM := \ + ffda-network-setup-mode + +EXCLUDE_NSM := \ + -ffda-network-setup-mode + ifeq ($(GLUON_TARGET),ath79-generic) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) @@ -336,9 +342,11 @@ endif ifeq ($(GLUON_TARGET),ramips-mt7621) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) + GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(INCLUDE_NSM) GLUON_netgear-ex6150_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) GLUON_ubiquiti-edgerouter-x_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) GLUON_ubiquiti-edgerouter-x-sfp_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) + GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) endif ifeq ($(GLUON_TARGET),ramips-mt76x8) @@ -356,6 +364,9 @@ ifeq ($(GLUON_TARGET),realtek-rtl838x) endif +# no pkglists for target realtek-rtl838x + + ifeq ($(GLUON_TARGET),rockchip-armv8) GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) From f8bede69f48d4051c8b0fdea48f4da5b73160d51 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 28 Dec 2023 15:50:53 +0100 Subject: [PATCH 109/129] update modules and community-packages --- modules | 2 +- release.mk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules b/modules index 114fe27..e0c0781 100644 --- a/modules +++ b/modules @@ -1,5 +1,5 @@ GLUON_SITE_FEEDS="ffac" PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git -PACKAGES_FFAC_COMMIT=ca08c5446221cee0fc3d65b7dff2f12101a3ca59 +PACKAGES_FFAC_COMMIT=128ffc19f1960d487616db91e31a7353960657cd PACKAGES_FFAC_BRANCH=master diff --git a/release.mk b/release.mk index 3d61e08..f4f9c61 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := 1b6ddac3c608961399c4877198dd552c12c3f07b # master +GLUON_GIT_REF := d517e0ff7c065fde70e098f2659a828c02f13ce2 # master From 24d729d18519fc8d2d3d70d2eb491ba429eb8785 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 28 Dec 2023 15:51:10 +0100 Subject: [PATCH 110/129] adjust configuration to image-customization.lua --- contrib/genpkglist.py | 336 ------------------------------------ image-customization.lua | 214 +++++++++++++++++++++++ site.mk | 373 +--------------------------------------- 3 files changed, 215 insertions(+), 708 deletions(-) delete mode 100755 contrib/genpkglist.py create mode 100644 image-customization.lua diff --git a/contrib/genpkglist.py b/contrib/genpkglist.py deleted file mode 100755 index ed55d6b..0000000 --- a/contrib/genpkglist.py +++ /dev/null @@ -1,336 +0,0 @@ -#!/usr/bin/env python3 -import os -from collections import defaultdict - -from jinja2 import Template - -# path to your gluon checkout, will be used to find targets and devices -GLUON_DIR = './gluon-build/' - - -class PackageList: - def __init__(self, name: str, pkgs: list): - self.name = name - self.pkgs = pkgs - - def __repr__(self): - return self.name - - def __lt__(self, other): - return self.name < other.name - - def render(self): - return Template(""" -INCLUDE_{{ name }} := \\ -{%- for pkg in pkgs %} - {{ pkg }}{% if not loop.last %} \\{% endif %} -{%- endfor %} - -EXCLUDE_{{ name }} := \\ -{%- for pkg in pkgs %} - -{{ pkg }}{% if not loop.last %} \\{% endif %} -{%- endfor %}""").render( - name=self.name, - pkgs=self.pkgs - ) - - -class Target: - def __init__(self, name): - self.name = name - self.devices = set() - self.pkglists = set() - self.excludes = defaultdict(set) - self.includes = defaultdict(set) - - def add_device(self, device: str): - self.devices.add(device) - - def add_pkglist(self, pkglist: PackageList): - self.pkglists.add(pkglist) - return self - - def include(self, devices: [str], pkglists: [PackageList]=None): - for device in devices: - assert(device in self.devices), "Device %s not in target %s" % (device, self.name) - if not pkglists: - self.includes[device] = self.pkglists - else: - self.includes[device] = self.includes[device].union(pkglists) - - return self - - def exclude(self, devices: [str], pkglists: [PackageList]=None): - for device in devices: - assert(device in self.devices), "Device %s not in target %s" % (device, self.name) - if not pkglists: - self.excludes[device] = self.pkglists - else: - self.excludes[device] = self.excludes[device].union(pkglists) - - return self - - def render(self): - if not bool(self.includes) and not self.pkglists: - return """ -# no pkglists for target %s -""" % self.name - - return Template(""" -ifeq ($(GLUON_TARGET),{{ target }}) - GLUON_SITE_PACKAGES += {% for pkglist in pkglists %}$(INCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %} -{% for device, include in includes.items() %} - GLUON_{{ device }}_SITE_PACKAGES += {% for pkglist in include|sort %}$(INCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %} -{%- endfor %}{% for device, exclude in excludes.items() %} - GLUON_{{ device }}_SITE_PACKAGES += {% for pkglist in exclude|sort %}$(EXCLUDE_{{ pkglist.name }}){% if not loop.last %} {% endif %}{% endfor %} -{%- endfor %} -endif""").render( - target=self.name, - pkglists=sorted(self.pkglists), - excludes=self.excludes, - includes=self.includes - ) - - -targets = {} -targetdir = os.path.join(GLUON_DIR, 'targets') -for targetfile in os.listdir(targetdir): - if targetfile in ['generic', 'targets.mk'] or targetfile.endswith('.inc'): - continue - - target = Target(targetfile) - with open(os.path.join(targetdir, targetfile)) as handle: - for line in handle.readlines(): - if line.startswith('device'): - target.add_device(line.split('\'')[1]) - - targets[targetfile] = target - - -# -# package definitions -# - -pkglists = [] - -PKGS_USB = PackageList('USB', ['usbutils']) -pkglists.append(PKGS_USB) - -PKGS_USB_HID = PackageList('USB_HID', [ - 'kmod-usb-hid', - 'kmod-hid-generic' -]) -pkglists.append(PKGS_USB_HID) - -PKGS_USB_SERIAL = PackageList('USB_SERIAL', [ - 'kmod-usb-serial', - 'kmod-usb-serial-ftdi', - 'kmod-usb-serial-pl2303' -]) -pkglists.append(PKGS_USB_SERIAL) - -PKGS_USB_STORAGE = PackageList('USB_STORAGE', [ - 'block-mount', - 'blkid', - 'kmod-fs-ext4', - 'kmod-fs-ntfs', - 'kmod-fs-vfat', - 'kmod-usb-storage', - 'kmod-usb-storage-extras', # Card Readers - 'kmod-usb-storage-uas', # USB Attached SCSI (UAS/UASP) - 'kmod-nls-base', - 'kmod-nls-cp1250', # NLS Codepage 1250 (Eastern Europe) - 'kmod-nls-cp437', # NLS Codepage 437 (United States, Canada) - 'kmod-nls-cp850', # NLS Codepage 850 (Europe) - 'kmod-nls-cp852', # NLS Codepage 852 (Europe) - 'kmod-nls-iso8859-1', # NLS ISO 8859-1 (Latin 1) - 'kmod-nls-iso8859-13', # NLS ISO 8859-13 (Latin 7; Baltic) - 'kmod-nls-iso8859-15', # NLS ISO 8859-15 (Latin 9) - 'kmod-nls-iso8859-2', # NLS ISO 8859-2 (Latin 2) - 'kmod-nls-utf8' # NLS UTF-8 -]) -pkglists.append(PKGS_USB_STORAGE) - -PKGS_USB_NET = PackageList('USB_NET', [ - 'kmod-mii', - 'kmod-usb-net', - 'kmod-usb-net-asix', - 'kmod-usb-net-asix-ax88179', - 'kmod-usb-net-cdc-eem', - 'kmod-usb-net-cdc-ether', - 'kmod-usb-net-cdc-subset', - 'kmod-usb-net-dm9601-ether', - 'kmod-usb-net-hso', - 'kmod-usb-net-ipheth', - 'kmod-usb-net-mcs7830', - 'kmod-usb-net-pegasus', - 'kmod-usb-net-rndis', - 'kmod-usb-net-rtl8152', - 'kmod-usb-net-smsc95xx' -]) -pkglists.append(PKGS_USB_NET) - -PKGS_PCI = PackageList('PCI', ['pciutils']) -pkglists.append(PKGS_PCI) - -PKGS_PCI_NET = PackageList('PCI_NET', [ - 'kmod-bnx2' # Broadcom NetExtreme BCM5706/5708/5709/5716 -]) -pkglists.append(PKGS_PCI_NET) - -PKGS_VIRT = PackageList('VIRT', ['qemu-ga']) -pkglists.append(PKGS_VIRT) - -PKGS_TLS = PackageList('TLS', [ - 'ca-bundle', - 'libustream-openssl', - 'openssh-sftp-server' -]) -pkglists.append(PKGS_TLS) - -PKGS_NSM = PackageList('NSM', [ - 'ffda-network-setup-mode', -]) -pkglists.append(PKGS_NSM) - -# -# package assignment -# - -targets['ath79-generic']. \ - add_pkglist(PKGS_TLS). \ - include([ # 7M usable firmware space + USB port - 'devolo-wifi-pro-1750e', - 'gl.inet-gl-ar150', - 'gl.inet-gl-ar300m-lite', - 'gl.inet-gl-ar750', - 'joy-it-jt-or750i', - 'netgear-wndr3700-v2', - 'tp-link-archer-a7-v5', - 'tp-link-archer-c5-v1', - 'tp-link-archer-c7-v2', - 'tp-link-archer-c7-v5', - 'tp-link-archer-c59-v1', - 'tp-link-tl-wr842n-v3', - 'tp-link-tl-wr1043nd-v4', - 'tp-link-tl-wr1043n-v5' - ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ - exclude([ - 'd-link-dir825b1', - 'tp-link-archer-c58-v1', - 'tp-link-archer-c25-v1', - 'tp-link-archer-c2-v3', - 'tp-link-archer-c6-v2-eu-ru-jp', - 'tp-link-archer-d50-v1', - 'tp-link-cpe210-v1', - 'tp-link-cpe210-v2', - 'tp-link-cpe210-v3', - 'tp-link-cpe220-v3', - 'tp-link-cpe510-v1', - 'tp-link-cpe510-v2', - 'tp-link-cpe510-v3', - 'tp-link-tl-wr902ac-v1', - 'tp-link-wbs210-v1', - 'tp-link-wbs210-v2', - 'tp-link-wbs510-v1', - 'ubiquiti-nanostation-m-xw', - 'ubiquiti-nanobeam-m5-xw', - 'ubiquiti-nanostation-loco-m-xw', - 'ubiquiti-unifi-ap', - ], pkglists=[PKGS_TLS]) - -for target in ['ath79-nand', 'ipq40xx-generic', 'ipq40xx-mikrotik', 'ipq806x-generic', 'lantiq-xway', 'mpc85xx-p1010', 'mpc85xx-p1020', 'mvebu-cortexa9', 'rockchip-armv8', 'sunxi-cortexa7', 'realtek-rtl838x', 'mediatek-filogic']: - targets[target]. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_TLS) - -targets['lantiq-xrx200']. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_TLS). \ - exclude([ # 7M usable firmware space + USB port - 'avm-fritz-box-7412', - 'tp-link-td-w8970', - 'tp-link-td-w8980' - ], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE, PKGS_TLS]) - -targets['mpc85xx-p1020'].add_pkglist(PKGS_TLS) - -for target in ['bcm27xx-bcm2708', 'bcm27xx-bcm2709', 'bcm27xx-bcm2710', 'bcm27xx-bcm2711']: - targets[target]. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_USB_HID). \ - add_pkglist(PKGS_TLS) - -targets['mediatek-mt7622']. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_TLS). \ - exclude([ # devices without usb ports - 'ubiquiti-unifi-6-lr-v1'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) - -targets['ramips-mt7621']. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_TLS). \ - include(['zyxel-nwa55axe'], pkglists=[PKGS_NSM]). \ - exclude([ # devices without usb ports - 'netgear-ex6150', - 'ubiquiti-edgerouter-x', - 'ubiquiti-edgerouter-x-sfp', - 'zyxel-nwa55axe'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]) - -targets['ramips-mt7620']. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_TLS). \ - exclude([ # devices without usb ports - 'netgear-ex3700'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ - exclude([ # low firmware space - 'netgear-ex3700', 'nexx-wt3020-8m', 'tp-link-archer-c2-v1', 'tp-link-archer-c20-v1', 'tp-link-archer-c20i', 'tp-link-archer-c50-v1'], pkglists=[PKGS_TLS]) - -targets['ramips-mt76x8']. \ - add_pkglist(PKGS_TLS). \ - include([ # 7M usable firmware space + USB port - 'gl-mt300n-v2', - 'gl.inet-microuter-n300', - 'netgear-r6120', - 'ravpower-rp-wd009'], pkglists=[PKGS_USB, PKGS_USB_NET, PKGS_USB_SERIAL, PKGS_USB_STORAGE]). \ - exclude([ # low firmware space - 'netgear-r6020'], pkglists=[PKGS_TLS]) - - - -for target in ['x86-64', 'x86-generic', 'x86-geode']: - targets[target]. \ - add_pkglist(PKGS_USB). \ - add_pkglist(PKGS_USB_NET). \ - add_pkglist(PKGS_USB_SERIAL). \ - add_pkglist(PKGS_USB_STORAGE). \ - add_pkglist(PKGS_PCI). \ - add_pkglist(PKGS_PCI_NET). \ - add_pkglist(PKGS_TLS) - -targets['x86-64'].add_pkglist(PKGS_VIRT) -targets['x86-legacy'].add_pkglist(PKGS_TLS) - -if __name__ == '__main__': - for pkglist in pkglists: - print(pkglist.render()) - - for target in sorted(targets.values(), key=lambda x: x.name): - print(target.render()) diff --git a/image-customization.lua b/image-customization.lua new file mode 100644 index 0000000..782f542 --- /dev/null +++ b/image-customization.lua @@ -0,0 +1,214 @@ +features { + 'autoupdater', + 'ebtables-filter-multicast', + 'ebtables-filter-ra-dhcp', + 'ebtables-limit-arp', + 'mesh-batman-adv-15', + 'mesh-vpn-wireguard', + 'respondd', + 'status-page', + 'web-advanced', + 'web-wizard', + 'config-mode-geo-location-osm', + 'radv-filterd', + 'radvd', + 'web-private-wifi', +} + +packages { + 'iwinfo', + 'ffac-ssid-changer', + 'ffac-wg-registration', + 'respondd-module-airtime', +} + +if device({ + 'zte,mf281', + 'glinet,gl-xe300', + 'glinet,gl-ap1300', + 'zte,mf289f', + 'wavlink,ws-wn572hp3-4g', + 'tplink,tl-mr6400-v5', +}) then + features { + 'web-cellular' + } +end + +if not device_class('tiny') then + packages { + 'ffac-autoupdater-wifi-fallback' + } +end + +pkgs_usb = { + 'usbutils' +} + +pkgs_hid = { + 'kmod-usb-hid', + 'kmod-hid-generic' +} + +pkgs_usb_serial = { + 'kmod-usb-serial', + 'kmod-usb-serial-ftdi', + 'kmod-usb-serial-pl2303' +} + +pkgs_usb_storage = { + 'block-mount', + 'blkid', + 'kmod-fs-ext4', + 'kmod-fs-ntfs', + 'kmod-fs-vfat', + 'kmod-usb-storage', + 'kmod-usb-storage-extras', -- Card Readers + 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP) + 'kmod-nls-base', + 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe) + 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada) + 'kmod-nls-cp850', -- NLS Codepage 850 (Europe) + 'kmod-nls-cp852', -- NLS Codepage 852 (Europe) + 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1) + 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic) + 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9) + 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2) + 'kmod-nls-utf8' -- NLS UTF-8 +} + +pkgs_usb_net = { + 'kmod-mii', + 'kmod-usb-net', + 'kmod-usb-net-asix', + 'kmod-usb-net-asix-ax88179', + 'kmod-usb-net-cdc-eem', + 'kmod-usb-net-cdc-ether', + 'kmod-usb-net-cdc-subset', + 'kmod-usb-net-dm9601-ether', + 'kmod-usb-net-hso', + 'kmod-usb-net-ipheth', + 'kmod-usb-net-mcs7830', + 'kmod-usb-net-pegasus', + 'kmod-usb-net-rndis', + 'kmod-usb-net-rtl8152', + 'kmod-usb-net-smsc95xx' +} + +pkgs_pci = { + 'pciutils', + 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 +} + +pkgs_tls = { + 'ca-bundle', + 'libustream-openssl', + 'openssh-sftp-server' +} + +include_tls = not device({ + 'd-link-dir825b1', + 'tp-link-archer-c58-v1', + 'tp-link-archer-c25-v1', + 'tp-link-archer-c2-v3', + 'tp-link-archer-c6-v2-eu-ru-jp', + 'tp-link-archer-d50-v1', + 'tp-link-cpe210-v1', + 'tp-link-cpe210-v2', + 'tp-link-cpe210-v3', + 'tp-link-cpe220-v3', + 'tp-link-cpe510-v1', + 'tp-link-cpe510-v2', + 'tp-link-cpe510-v3', + 'tp-link-tl-wr902ac-v1', + 'tp-link-wbs210-v1', + 'tp-link-wbs210-v2', + 'tp-link-wbs510-v1', + 'ubiquiti-nanostation-m-xw', + 'ubiquiti-nanobeam-m5-xw', + 'ubiquiti-nanostation-loco-m-xw', + 'ubiquiti-unifi-ap', + + 'netgear-ex3700', + 'nexx-wt3020-8m', + 'tp-link-archer-c2-v1', + 'tp-link-archer-c20-v1', + 'tp-link-archer-c20i', + 'tp-link-archer-c50-v1', + + 'netgear-r6020' +}) + +if include_tls then + packages(pkgs_tls) +end + +include_usb = true + +-- 7M usable firmware space + USB port +if target('ath79', 'generic') and not device({ + 'devolo-wifi-pro-1750e', + 'gl.inet-gl-ar150', + 'gl.inet-gl-ar300m-lite', + 'gl.inet-gl-ar750', + 'joy-it-jt-or750i', + 'netgear-wndr3700-v2', + 'tp-link-archer-a7-v5', + 'tp-link-archer-c5-v1', + 'tp-link-archer-c7-v2', + 'tp-link-archer-c7-v5', + 'tp-link-archer-c59-v1', + 'tp-link-tl-wr842n-v3', + 'tp-link-tl-wr1043nd-v4', + 'tp-link-tl-wr1043n-v5' +}) then + include_usb = false +end + +if target('ramips', 'mt76x8') and not device({ + 'gl-mt300n-v2', + 'gl.inet-microuter-n300', + 'netgear-r6120', + 'ravpower-rp-wd009' +}) then + include_usb = false +end + +if target('realtek','rtl838x') then + include_usb = false +end + +if device({ + 'avm-fritz-box-7412', + 'tp-link-td-w8970', + 'tp-link-td-w8980', + 'ubiquiti-unifi-6-lr-v1', + 'netgear-ex6150', + 'ubiquiti-edgerouter-x', + 'ubiquiti-edgerouter-x-sfp', + 'zyxel-nwa55axe'}) then + include_usb = false +end + +if include_usb then + packages(pkgs_usb) + packages(pkgs_usb_net) + packages(pkgs_usb_serial) + packages(pkgs_usb_storage) +end + +if device({'zyxel-nwa55axe'}) then + packages {'ffda-network-setup-mode'} +end + +if target('x86', '64') then + packages {'qemu-ga'} +end + +if target('x86') and not target('x86', 'legacy') then + packages(pkgs_pci) +end + +if target('bcm27xx') then + packages(pkgs_hid) +end \ No newline at end of file diff --git a/site.mk b/site.mk index 0d19d2c..2d966ca 100644 --- a/site.mk +++ b/site.mk @@ -1,52 +1,5 @@ ## gluon site.mk Freifunk Regio Aachen -## GLUON_FEATURES -# Specify Gluon features/packages to enable; -# Gluon will automatically enable a set of packages -# depending on the combination of features listed -define GLUON_FEATURES := -autoupdater -config-mode-geo-location-osm -ebtables-filter-multicast -ebtables-filter-ra-dhcp -ebtables-limit-arp -mesh-batman-adv-15 -mesh-vpn-wireguard -radv-filterd -radvd -respondd -status-page -web-advanced -web-private-wifi -web-wizard -endef -GLUON_FEATURES := $(GLUON_FEATURES:\n= ) - -define GLUON_FEATURES_standard := -web-cellular -endef -# wireless-encryption-wpa3 -# gluon-mesh-wireless-sae -GLUON_FEATURES_standard := $(GLUON_FEATURES_standard:\n= ) - -## GLUON_SITE_PACKAGES -# Specify additional Gluon/OpenWrt packages to include here; -# A minus sign may be prepended to remove a packages from the -# selection that would be enabled by default or due to the -# chosen feature flags -define GLUON_SITE_PACKAGES := -ffac-ssid-changer -ffac-wg-registration -iwinfo -respondd-module-airtime -endef -GLUON_SITE_PACKAGES := $(GLUON_SITE_PACKAGES:\n= ) - -define GLUON_SITE_PACKAGES_standard := -ffac-autoupdater-wifi-fallback -endef -GLUON_SITE_PACKAGES_standard := $(GLUON_SITE_PACKAGES_standard:\n= ) - # Build everything by default ifeq ($(BROKEN),0) override BROKEN := @@ -71,328 +24,4 @@ GLUON_AUTOUPDATER_ENABLED ?= 1 GLUON_REGION ?= eu # Languages to include -GLUON_LANGS ?= en de - -# Additional package list generated by contrib/genpkglist.py -INCLUDE_USB := \ - usbutils - -EXCLUDE_USB := \ - -usbutils - -INCLUDE_USB_HID := \ - kmod-usb-hid \ - kmod-hid-generic - -EXCLUDE_USB_HID := \ - -kmod-usb-hid \ - -kmod-hid-generic - -INCLUDE_USB_SERIAL := \ - kmod-usb-serial \ - kmod-usb-serial-ftdi \ - kmod-usb-serial-pl2303 - -EXCLUDE_USB_SERIAL := \ - -kmod-usb-serial \ - -kmod-usb-serial-ftdi \ - -kmod-usb-serial-pl2303 - -INCLUDE_USB_STORAGE := \ - block-mount \ - blkid \ - kmod-fs-ext4 \ - kmod-fs-ntfs \ - kmod-fs-vfat \ - kmod-usb-storage \ - kmod-usb-storage-extras \ - kmod-usb-storage-uas \ - kmod-nls-base \ - kmod-nls-cp1250 \ - kmod-nls-cp437 \ - kmod-nls-cp850 \ - kmod-nls-cp852 \ - kmod-nls-iso8859-1 \ - kmod-nls-iso8859-13 \ - kmod-nls-iso8859-15 \ - kmod-nls-iso8859-2 \ - kmod-nls-utf8 - -EXCLUDE_USB_STORAGE := \ - -block-mount \ - -blkid \ - -kmod-fs-ext4 \ - -kmod-fs-ntfs \ - -kmod-fs-vfat \ - -kmod-usb-storage \ - -kmod-usb-storage-extras \ - -kmod-usb-storage-uas \ - -kmod-nls-base \ - -kmod-nls-cp1250 \ - -kmod-nls-cp437 \ - -kmod-nls-cp850 \ - -kmod-nls-cp852 \ - -kmod-nls-iso8859-1 \ - -kmod-nls-iso8859-13 \ - -kmod-nls-iso8859-15 \ - -kmod-nls-iso8859-2 \ - -kmod-nls-utf8 - -INCLUDE_USB_NET := \ - kmod-mii \ - kmod-usb-net \ - kmod-usb-net-asix \ - kmod-usb-net-asix-ax88179 \ - kmod-usb-net-cdc-eem \ - kmod-usb-net-cdc-ether \ - kmod-usb-net-cdc-subset \ - kmod-usb-net-dm9601-ether \ - kmod-usb-net-hso \ - kmod-usb-net-ipheth \ - kmod-usb-net-mcs7830 \ - kmod-usb-net-pegasus \ - kmod-usb-net-rndis \ - kmod-usb-net-rtl8152 \ - kmod-usb-net-smsc95xx - -EXCLUDE_USB_NET := \ - -kmod-mii \ - -kmod-usb-net \ - -kmod-usb-net-asix \ - -kmod-usb-net-asix-ax88179 \ - -kmod-usb-net-cdc-eem \ - -kmod-usb-net-cdc-ether \ - -kmod-usb-net-cdc-subset \ - -kmod-usb-net-dm9601-ether \ - -kmod-usb-net-hso \ - -kmod-usb-net-ipheth \ - -kmod-usb-net-mcs7830 \ - -kmod-usb-net-pegasus \ - -kmod-usb-net-rndis \ - -kmod-usb-net-rtl8152 \ - -kmod-usb-net-smsc95xx - -INCLUDE_PCI := \ - pciutils - -EXCLUDE_PCI := \ - -pciutils - -INCLUDE_PCI_NET := \ - kmod-bnx2 - -EXCLUDE_PCI_NET := \ - -kmod-bnx2 - -INCLUDE_VIRT := \ - qemu-ga - -EXCLUDE_VIRT := \ - -qemu-ga - -INCLUDE_TLS := \ - ca-bundle \ - libustream-openssl \ - openssh-sftp-server - -EXCLUDE_TLS := \ - -ca-bundle \ - -libustream-openssl \ - -openssh-sftp-server - -INCLUDE_NSM := \ - ffda-network-setup-mode - -EXCLUDE_NSM := \ - -ffda-network-setup-mode - -ifeq ($(GLUON_TARGET),ath79-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) - - GLUON_devolo-wifi-pro-1750e_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_gl.inet-gl-ar150_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_gl.inet-gl-ar300m-lite_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_gl.inet-gl-ar750_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_joy-it-jt-or750i_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_netgear-wndr3700-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-archer-a7-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-archer-c5-v1_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-archer-c7-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-archer-c7-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-archer-c59-v1_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-tl-wr842n-v3_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-tl-wr1043nd-v4_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_tp-link-tl-wr1043n-v5_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_d-link-dir825b1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c2-v3_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c6-v2-eu-ru-jp_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-d50-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe220-v3_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe510-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe510-v2_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-cpe510-v3_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-tl-wr902ac-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-wbs210-v2_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_ubiquiti-nanostation-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_ubiquiti-nanobeam-m5-xw_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_ubiquiti-nanostation-loco-m-xw_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_ubiquiti-unifi-ap_SITE_PACKAGES += $(EXCLUDE_TLS) -endif - -# no pkglists for target ath79-mikrotik - - -ifeq ($(GLUON_TARGET),ath79-nand) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),bcm27xx-bcm2708) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),bcm27xx-bcm2709) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),bcm27xx-bcm2710) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),bcm27xx-bcm2711) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),ipq40xx-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),ipq40xx-mikrotik) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),ipq806x-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),lantiq-xrx200) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - - GLUON_avm-fritz-box-7412_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_tp-link-td-w8970_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_tp-link-td-w8980_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) -endif - -ifeq ($(GLUON_TARGET),lantiq-xway) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),mediatek-filogic) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),mediatek-mt7622) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - - GLUON_ubiquiti-unifi-6-lr-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) -endif - -ifeq ($(GLUON_TARGET),mpc85xx-p1010) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),mpc85xx-p1020) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),mvebu-cortexa9) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),ramips-mt7620) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - - GLUON_netgear-ex3700_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_nexx-wt3020-8m_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c2-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c20-v1_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c20i_SITE_PACKAGES += $(EXCLUDE_TLS) - GLUON_tp-link-archer-c50-v1_SITE_PACKAGES += $(EXCLUDE_TLS) -endif - -ifeq ($(GLUON_TARGET),ramips-mt7621) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - - GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(INCLUDE_NSM) - GLUON_netgear-ex6150_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_ubiquiti-edgerouter-x_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_ubiquiti-edgerouter-x-sfp_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) - GLUON_zyxel-nwa55axe_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE) -endif - -ifeq ($(GLUON_TARGET),ramips-mt76x8) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) - - GLUON_gl-mt300n-v2_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_gl.inet-microuter-n300_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_netgear-r6120_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_ravpower-rp-wd009_SITE_PACKAGES += $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - GLUON_netgear-r6020_SITE_PACKAGES += $(EXCLUDE_TLS) -endif - -ifeq ($(GLUON_TARGET),realtek-rtl838x) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -# no pkglists for target realtek-rtl838x - - -ifeq ($(GLUON_TARGET),rockchip-armv8) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),sunxi-cortexa7) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),x86-64) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) $(INCLUDE_VIRT) - -endif - -ifeq ($(GLUON_TARGET),x86-generic) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),x86-geode) - GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE) - -endif - -ifeq ($(GLUON_TARGET),x86-legacy) - GLUON_SITE_PACKAGES += $(INCLUDE_TLS) - -endif +GLUON_LANGS ?= en de \ No newline at end of file From cf6e9f1055ba6765c41a41ead1379578651ee91b Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 4 Jan 2024 15:07:11 +0100 Subject: [PATCH 111/129] update modules, gluon and patches --- modules | 8 +- patches/010-primary-mac.patch | 2 +- patches/020-interfaces.patch | 4 +- patches/030-openwrt-ipq807x-initramfs.patch | 40 - patches/add-covr-x1860.patch | 1220 +----------------- patches/cellular.patch | 19 +- patches/gluon-makefile.patch | 4 +- patches/modules.patch | 16 + patches/ssid-changer.patch | 43 - patches/targets-ath79-generic.patch | 20 +- patches/targets-ath79-mikrotik.patch | 8 +- patches/targets-bcm2711-raspberry-pi-4.patch | 15 - patches/targets-ipq40xx-generic.patch | 65 +- patches/targets-ipq40xx-mikrotik.patch | 2 +- patches/targets-lantiq-xrx200-devices.patch | 4 +- patches/targets-mk.patch | 9 +- patches/targets-ramips-mt7621.patch | 8 +- release.mk | 2 +- 18 files changed, 57 insertions(+), 1432 deletions(-) delete mode 100644 patches/030-openwrt-ipq807x-initramfs.patch create mode 100644 patches/modules.patch delete mode 100644 patches/ssid-changer.patch delete mode 100644 patches/targets-bcm2711-raspberry-pi-4.patch diff --git a/modules b/modules index e0c0781..f47359e 100644 --- a/modules +++ b/modules @@ -1,5 +1,5 @@ -GLUON_SITE_FEEDS="ffac" +GLUON_SITE_FEEDS="community" -PACKAGES_FFAC_REPO=https://github.com/freifunk-gluon/community-packages.git -PACKAGES_FFAC_COMMIT=128ffc19f1960d487616db91e31a7353960657cd -PACKAGES_FFAC_BRANCH=master +PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git +PACKAGES_COMMUNITY_COMMIT=d7554980f944273bb1e51c40a33aa6662130c6ab +PACKAGES_COMMUNITY_BRANCH=master diff --git a/patches/010-primary-mac.patch b/patches/010-primary-mac.patch index 74c385d..3903fa8 100644 --- a/patches/010-primary-mac.patch +++ b/patches/010-primary-mac.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac -index 9f92b5b2..5e8c5c1b 100755 +index fce501a6..08603e94 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac @@ -81,6 +81,8 @@ local primary_addrs = { diff --git a/patches/020-interfaces.patch b/patches/020-interfaces.patch index 4c6b0fe..2a2ad3c 100644 --- a/patches/020-interfaces.patch +++ b/patches/020-interfaces.patch @@ -1,8 +1,8 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -index 1ce81b65..24113719 100755 +index 22bf7bb8..0cddbaea 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/020-interfaces -@@ -71,10 +71,29 @@ elseif platform.match('ramips', 'mt7621', { +@@ -70,10 +70,29 @@ elseif platform.match('ramips', 'mt7621', { 'tplink,eap615-wall-v1', }) then lan_ifname, wan_ifname = 'lan1 lan2 lan3', 'lan0' diff --git a/patches/030-openwrt-ipq807x-initramfs.patch b/patches/030-openwrt-ipq807x-initramfs.patch deleted file mode 100644 index 23d9e9a..0000000 --- a/patches/030-openwrt-ipq807x-initramfs.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/patches/openwrt/0011-qualcommax-fix-wax218.patch b/patches/openwrt/0011-qualcommax-fix-wax218.patch -new file mode 100644 -index 00000000..b8ce5ca6 ---- /dev/null -+++ b/patches/openwrt/0011-qualcommax-fix-wax218.patch -@@ -0,0 +1,34 @@ -+From 02ed2b0271c5e17584884146649d7fb64a9ac35d Mon Sep 17 00:00:00 2001 -+From: Florian Maurer -+Date: Thu, 26 Oct 2023 08:40:59 +0200 -+Subject: [PATCH] qualcommax: only build initramfs if -+ CONFIG_TARGET_ROOTFS_INITRAMFS is set -+ -+Signed-off-by: Florian Maurer -+--- -+ target/linux/ipq807x/image/generic.mk | 4 +++- -+ 1 file changed, 3 insertions(+), 1 deletion(-) -+ -+diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk -+index 124cdfc3b2..fb991156d5 100644 -+--- a/target/linux/ipq807x/image/generic.mk -++++ b/target/linux/ipq807x/image/generic.mk -+@@ -80,15 +80,17 @@ TARGET_DEVICES += edimax_cax1800 -+ define Device/netgear_wax218 -+ $(call Device/FitImage) -+ $(call Device/UbiFit) -+- ARTIFACTS := web-ui-factory.fit -+ DEVICE_VENDOR := Netgear -+ DEVICE_MODEL := WAX218 -+ DEVICE_DTS_CONFIG := config@hk07 -+ BLOCKSIZE := 128k -+ PAGESIZE := 2048 -+ SOC := ipq8072 -++ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) -++ ARTIFACTS := web-ui-factory.fit -+ ARTIFACT/web-ui-factory.fit := append-image initramfs-uImage.itb | \ -+ ubinize-kernel | qsdk-ipq-factory-nand -++endif -+ DEVICE_PACKAGES := kmod-spi-gpio kmod-spi-bitbang kmod-gpio-nxp-74hc164 \ -+ ipq-wifi-netgear_wax218 -+ endef diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch index f4cdd67..701b4b6 100644 --- a/patches/add-covr-x1860.patch +++ b/patches/add-covr-x1860.patch @@ -1,1224 +1,8 @@ -diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch -new file mode 100644 -index 00000000..a84b7335 ---- /dev/null -+++ b/patches/openwrt/0007-procd-add-Dlink-sge-image.patch -@@ -0,0 +1,885 @@ -+From: Roland <75312877+RolandoMagico@users.noreply.github.com> -+Date: Mon, 26 Jun 2023 18:03:51 +0200 -+Subject: procd: add Dlink sge image -+ -+diff --git a/tools/firmware-utils/patches/002-add-dlink-sge-image.patch b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch -+new file mode 100644 -+index 0000000000000000000000000000000000000000..c87ad267dc2924c3520eb4fcae0c3ae2ca295017 -+--- /dev/null -++++ b/tools/firmware-utils/patches/002-add-dlink-sge-image.patch -+@@ -0,0 +1,875 @@ -++--- a/CMakeLists.txt -+++++ b/CMakeLists.txt -++@@ -40,6 +40,7 @@ FW_UTIL(buffalo-tftp src/buffalo-lib.c " -++ FW_UTIL(cros-vbutil "" "" "${OPENSSL_CRYPTO_LIBRARIES}") -++ FW_UTIL(dgfirmware "" "" "") -++ FW_UTIL(dgn3500sum "" "" "") -+++FW_UTIL(dlink-sge-image "" "" "${OPENSSL_CRYPTO_LIBRARIES}") -++ FW_UTIL(dns313-header "" "" "") -++ FW_UTIL(edimax_fw_header "" "" "") -++ FW_UTIL(encode_crc "" "" "") -++--- /dev/null -+++++ b/src/dlink-sge-image.c -++@@ -0,0 +1,510 @@ -+++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT -+++/* -+++ * Copyright (C) 2023 Sebastian Schaper -+++ * -+++ * This tool encrypts factory images for certain D-Link Devices -+++ * manufactured by SGE / T&W, e.g. COVR-C1200, COVR-P2500, DIR-882, ... -+++ * -+++ * Usage: -+++ * ./dlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt] -+++ * -+++ */ -+++ -+++#include "dlink-sge-image.h" -+++ -+++#include -+++#include -+++ -+++#include -+++#include -+++#include -+++#include -+++ -+++#define BUFSIZE 4096 -+++ -+++#define HEAD_MAGIC "SHRS" -+++#define HEAD_MAGIC_LEN 4 -+++#define SHA512_DIGEST_LENGTH 64 -+++#define RSA_KEY_LENGTH_BYTES 512 -+++#define AES_BLOCK_SIZE 16 -+++#define HEADER_LEN 1756 -+++ -+++unsigned char aes_iv[AES_BLOCK_SIZE]; -+++ -+++unsigned char readbuf[BUFSIZE]; -+++unsigned char encbuf[BUFSIZE]; -+++ -+++unsigned int read_bytes; -+++unsigned long read_total; -+++unsigned int i; -+++ -+++unsigned char vendor_key[AES_BLOCK_SIZE]; -+++BIO *rsa_private_bio; -+++const EVP_CIPHER *aes128; -+++EVP_CIPHER_CTX *aes_ctx; -+++ -+++FILE *input_file; -+++FILE *output_file; -+++ -+++int pass_cb(char *buf, int size, int rwflag, void *u) -+++{ -+++ char *tmp = "12345678"; -+++ size_t len = strlen(tmp); -+++ -+++ if (len > size) -+++ len = size; -+++ memcpy(buf, tmp, len); -+++ return len; -+++} -+++ -+++void image_encrypt(void) -+++{ -+++ char buf[HEADER_LEN]; -+++ const EVP_MD *sha512; -+++ EVP_MD_CTX *digest_before; -+++ EVP_MD_CTX *digest_post; -+++ EVP_MD_CTX *digest_vendor; -+++ EVP_PKEY *signing_key; -+++ EVP_PKEY_CTX *rsa_ctx; -+++ uint32_t payload_length_before, pad_len, sizebuf; -+++ unsigned char md_before[SHA512_DIGEST_LENGTH]; -+++ unsigned char md_post[SHA512_DIGEST_LENGTH]; -+++ unsigned char md_vendor[SHA512_DIGEST_LENGTH]; -+++ unsigned char sigret[RSA_KEY_LENGTH_BYTES]; -+++ size_t siglen; -+++ char footer[] = {0x00, 0x00, 0x00, 0x00, 0x30}; -+++ -+++ // seek to position 1756 (begin of AES-encrypted data), -+++ // write image headers later -+++ memset(buf, 0, HEADER_LEN); -+++ fwrite(&buf, 1, HEADER_LEN, output_file); -+++ digest_before = EVP_MD_CTX_new(); -+++ digest_post = EVP_MD_CTX_new(); -+++ digest_vendor = EVP_MD_CTX_new(); -+++ sha512 = EVP_sha512(); -+++ EVP_DigestInit_ex(digest_before, sha512, NULL); -+++ EVP_DigestInit_ex(digest_post, sha512, NULL); -+++ EVP_DigestInit_ex(digest_vendor, sha512, NULL); -+++ -+++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL); -+++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL); -+++ -+++ EVP_PKEY_sign_init(rsa_ctx); -+++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512); -+++ -+++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE); -+++ aes_ctx = EVP_CIPHER_CTX_new(); -+++ EVP_EncryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv); -+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); -+++ int outlen; -+++ -+++ while ((read_bytes = fread(&readbuf, 1, BUFSIZE, input_file)) == BUFSIZE) { -+++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes); -+++ read_total += read_bytes; -+++ -+++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], BUFSIZE); -+++ fwrite(&encbuf, 1, BUFSIZE, output_file); -+++ -+++ EVP_DigestUpdate(digest_post, &encbuf[0], BUFSIZE); -+++ } -+++ -+++ // handle last block of data (read_bytes < BUFSIZE) -+++ EVP_DigestUpdate(digest_before, &readbuf[0], read_bytes); -+++ read_total += read_bytes; -+++ -+++ pad_len = AES_BLOCK_SIZE - (read_total % AES_BLOCK_SIZE); -+++ if (pad_len == 0) -+++ pad_len = AES_BLOCK_SIZE; -+++ memset(&readbuf[read_bytes], 0, pad_len); -+++ -+++ EVP_EncryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes + pad_len); -+++ EVP_CIPHER_CTX_free(aes_ctx); -+++ fwrite(&encbuf, 1, read_bytes + pad_len, output_file); -+++ -+++ EVP_DigestUpdate(digest_post, &encbuf[0], read_bytes + pad_len); -+++ -+++ fclose(input_file); -+++ payload_length_before = read_total; -+++ printf("\npayload_length_before: %li\n", read_total); -+++ -+++ // copy digest state, since we need another one with vendor key appended -+++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before); -+++ -+++ EVP_DigestFinal_ex(digest_before, &md_before[0], NULL); -+++ EVP_MD_CTX_free(digest_before); -+++ -+++ printf("\ndigest_before: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_before[i]); -+++ -+++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE); -+++ EVP_DigestFinal_ex(digest_vendor, &md_vendor[0], NULL); -+++ EVP_MD_CTX_free(digest_vendor); -+++ -+++ printf("\ndigest_vendor: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_vendor[i]); -+++ -+++ EVP_DigestFinal_ex(digest_post, &md_post[0], NULL); -+++ EVP_MD_CTX_free(digest_post); -+++ -+++ printf("\ndigest_post: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_post[i]); -+++ -+++ fwrite(&footer, 1, 5, output_file); -+++ -+++ // go back to file header and write all the digests and signatures -+++ fseek(output_file, 0, SEEK_SET); -+++ -+++ fwrite(HEAD_MAGIC, 1, HEAD_MAGIC_LEN, output_file); -+++ -+++ // write payload length before -+++ sizebuf = htonl(payload_length_before); -+++ fwrite((char *) &sizebuf, 1, 4, output_file); -+++ -+++ // write payload length post -+++ payload_length_before += pad_len; -+++ sizebuf = htonl(payload_length_before); -+++ fwrite((char *) &sizebuf, 1, 4, output_file); -+++ -+++ // write salt and digests -+++ fwrite(salt, 1, AES_BLOCK_SIZE, output_file); -+++ fwrite(&md_vendor[0], 1, SHA512_DIGEST_LENGTH, output_file); -+++ fwrite(&md_before[0], 1, SHA512_DIGEST_LENGTH, output_file); -+++ fwrite(&md_post[0], 1, SHA512_DIGEST_LENGTH, output_file); -+++ -+++ // zero-fill rsa_pub field, unused in header -+++ memset(sigret, 0, RSA_KEY_LENGTH_BYTES); -+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); -+++ -+++ // sign md_before -+++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_before[0], SHA512_DIGEST_LENGTH); -+++ printf("\nsigned before:\n"); -+++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++) -+++ printf("%02x", sigret[i]); -+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); -+++ -+++ // sign md_post -+++ EVP_PKEY_sign(rsa_ctx, &sigret[0], &siglen, &md_post[0], SHA512_DIGEST_LENGTH); -+++ printf("\nsigned post:\n"); -+++ for (i = 0; i < RSA_KEY_LENGTH_BYTES; i++) -+++ printf("%02x", sigret[i]); -+++ fwrite(&sigret[0], 1, RSA_KEY_LENGTH_BYTES, output_file); -+++ -+++ printf("\n"); -+++ -+++ fclose(output_file); -+++} -+++ -+++void image_decrypt(void) -+++{ -+++ char magic[4]; -+++ uint32_t payload_length_before, payload_length_post, pad_len; -+++ char salt[AES_BLOCK_SIZE]; -+++ char md_vendor[SHA512_DIGEST_LENGTH]; -+++ char md_before[SHA512_DIGEST_LENGTH]; -+++ char md_post[SHA512_DIGEST_LENGTH]; -+++ EVP_PKEY *signing_key; -+++ EVP_PKEY_CTX *rsa_ctx; -+++ unsigned char rsa_sign_before[RSA_KEY_LENGTH_BYTES]; -+++ unsigned char rsa_sign_post[RSA_KEY_LENGTH_BYTES]; -+++ unsigned char md_post_actual[SHA512_DIGEST_LENGTH]; -+++ unsigned char md_before_actual[SHA512_DIGEST_LENGTH]; -+++ unsigned char md_vendor_actual[SHA512_DIGEST_LENGTH]; -+++ const EVP_MD *sha512; -+++ EVP_MD_CTX *digest_before; -+++ EVP_MD_CTX *digest_post; -+++ EVP_MD_CTX *digest_vendor; -+++ -+++ printf("\ndecrypt mode\n"); -+++ -+++ if (fread(&magic, 1, HEAD_MAGIC_LEN, input_file) == 0) -+++ goto error_read; -+++ if (strncmp(magic, HEAD_MAGIC, HEAD_MAGIC_LEN) != 0) { -+++ fprintf(stderr, "Input File header magic does not match '%s'.\n" -+++ "Maybe this file is not encrypted?\n", HEAD_MAGIC); -+++ goto error; -+++ } -+++ -+++ if (fread((char *) &payload_length_before, 1, 4, input_file) == 0) -+++ goto error_read; -+++ if (fread((char *) &payload_length_post, 1, 4, input_file) == 0) -+++ goto error_read; -+++ payload_length_before = ntohl(payload_length_before); -+++ payload_length_post = ntohl(payload_length_post); -+++ -+++ if (fread(salt, 1, AES_BLOCK_SIZE, input_file) == 0) -+++ goto error_read; -+++ if (fread(md_vendor, 1, SHA512_DIGEST_LENGTH, input_file) == 0) -+++ goto error_read; -+++ if (fread(md_before, 1, SHA512_DIGEST_LENGTH, input_file) == 0) -+++ goto error_read; -+++ if (fread(md_post, 1, SHA512_DIGEST_LENGTH, input_file) == 0) -+++ goto error_read; -+++ -+++ // skip rsa_pub -+++ if (fread(readbuf, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) -+++ goto error_read; -+++ -+++ if (fread(rsa_sign_before, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) -+++ goto error_read; -+++ if (fread(rsa_sign_post, 1, RSA_KEY_LENGTH_BYTES, input_file) == 0) -+++ goto error_read; -+++ -+++ // file should be at position HEADER_LEN now, start AES decryption -+++ digest_before = EVP_MD_CTX_new(); -+++ digest_post = EVP_MD_CTX_new(); -+++ digest_vendor = EVP_MD_CTX_new(); -+++ sha512 = EVP_sha512(); -+++ EVP_DigestInit_ex(digest_before, sha512, NULL); -+++ EVP_DigestInit_ex(digest_post, sha512, NULL); -+++ EVP_DigestInit_ex(digest_vendor, sha512, NULL); -+++ -+++ memcpy(&aes_iv, &salt, AES_BLOCK_SIZE); -+++ aes_ctx = EVP_CIPHER_CTX_new(); -+++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &vendor_key[0], aes_iv); -+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); -+++ int outlen; -+++ pad_len = payload_length_post - payload_length_before; -+++ -+++ while (read_total < payload_length_post) { -+++ if (read_total + BUFSIZE <= payload_length_post) -+++ read_bytes = fread(&readbuf, 1, BUFSIZE, input_file); -+++ else -+++ read_bytes = fread(&readbuf, 1, payload_length_post - read_total, \ -+++ input_file); -+++ -+++ read_total += read_bytes; -+++ -+++ EVP_DigestUpdate(digest_post, &readbuf[0], read_bytes); -+++ -+++ EVP_DecryptUpdate(aes_ctx, encbuf, &outlen, &readbuf[0], read_bytes); -+++ -+++ // only update digest_before until payload_length_before, -+++ // do not hash decrypted padding -+++ if (read_total > payload_length_before) { -+++ // only calc hash for data before padding -+++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes - pad_len); -+++ fwrite(&encbuf[0], 1, read_bytes - pad_len, output_file); -+++ -+++ // copy digest state, since we need another one with vendor key appended -+++ EVP_MD_CTX_copy_ex(digest_vendor, digest_before); -+++ -+++ // append vendor_key -+++ EVP_DigestUpdate(digest_vendor, &vendor_key[0], AES_BLOCK_SIZE); -+++ } else { -+++ // calc hash for all of read_bytes -+++ EVP_DigestUpdate(digest_before, &encbuf[0], read_bytes); -+++ fwrite(&encbuf[0], 1, read_bytes, output_file); -+++ } -+++ } -+++ -+++ fclose(input_file); -+++ fclose(output_file); -+++ EVP_CIPHER_CTX_free(aes_ctx); -+++ -+++ EVP_DigestFinal_ex(digest_post, &md_post_actual[0], NULL); -+++ EVP_MD_CTX_free(digest_post); -+++ -+++ printf("\ndigest_post: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_post_actual[i]); -+++ -+++ if (strncmp(md_post, (char *) md_post_actual, SHA512_DIGEST_LENGTH) != 0) { -+++ fprintf(stderr, "SHA512 post does not match file contents.\n"); -+++ goto error; -+++ } -+++ -+++ EVP_DigestFinal_ex(digest_before, &md_before_actual[0], NULL); -+++ EVP_MD_CTX_free(digest_before); -+++ -+++ printf("\ndigest_before: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_before_actual[i]); -+++ -+++ if (strncmp(md_before, (char *) md_before_actual, SHA512_DIGEST_LENGTH) != 0) { -+++ fprintf(stderr, "SHA512 before does not match decrypted payload.\n"); -+++ goto error; -+++ } -+++ -+++ EVP_DigestFinal_ex(digest_vendor, &md_vendor_actual[0], NULL); -+++ EVP_MD_CTX_free(digest_vendor); -+++ -+++ printf("\ndigest_vendor: "); -+++ for (i = 0; i < SHA512_DIGEST_LENGTH; i++) -+++ printf("%02x", md_vendor_actual[i]); -+++ -+++ if (strncmp(md_vendor, (char *) md_vendor_actual, SHA512_DIGEST_LENGTH) != 0) { -+++ fprintf(stderr, "SHA512 vendor does not match decrypted payload padded" \ -+++ " with vendor key.\n"); -+++ goto error; -+++ } -+++ -+++ signing_key = PEM_read_bio_PrivateKey(rsa_private_bio, NULL, pass_cb, NULL); -+++ rsa_ctx = EVP_PKEY_CTX_new(signing_key, NULL); -+++ EVP_PKEY_verify_init(rsa_ctx); -+++ EVP_PKEY_CTX_set_signature_md(rsa_ctx, sha512); -+++ -+++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_before[0], RSA_KEY_LENGTH_BYTES, \ -+++ &md_before_actual[0], SHA512_DIGEST_LENGTH)) { -+++ printf("\nsignature before verification success"); -+++ } else { -+++ fprintf(stderr, "Signature before verification failed.\nThe decrypted" \ -+++ " image file may however be flashable via bootloader recovery.\n"); -+++ } -+++ -+++ if (EVP_PKEY_verify(rsa_ctx, &rsa_sign_post[0], RSA_KEY_LENGTH_BYTES, \ -+++ &md_post_actual[0], SHA512_DIGEST_LENGTH)) { -+++ printf("\nsignature post verification success"); -+++ } else { -+++ fprintf(stderr, "Signature post verification failed.\nThe decrypted" \ -+++ " image file may however be flashable via bootloader recovery.\n"); -+++ } -+++ -+++ printf("\n"); -+++ -+++ return; -+++ -+++error_read: -+++ fprintf(stderr, "Error reading header fields from input file.\n"); -+++error: -+++ fclose(input_file); -+++ fclose(output_file); -+++ exit(1); -+++} -+++ -+++/* -+++ generate legacy vendor key for COVR-C1200, COVR-P2500, DIR-882, DIR-2660, ... -+++ decrypt ciphertext key2 using aes128 with key1 and iv, write result to *vkey -+++*/ -+++void generate_vendorkey_legacy(unsigned char *vkey) -+++{ -+++ int outlen; -+++ memcpy(&aes_iv, &iv, AES_BLOCK_SIZE); -+++ aes_ctx = EVP_CIPHER_CTX_new(); -+++ EVP_DecryptInit_ex(aes_ctx, aes128, NULL, &key1[0], &aes_iv[0]); -+++ EVP_CIPHER_CTX_set_padding(aes_ctx, 0); -+++ EVP_DecryptUpdate(aes_ctx, vkey, &outlen, &key2[0], AES_BLOCK_SIZE); -+++ EVP_CIPHER_CTX_free(aes_ctx); -+++} -+++ -+++/* -+++ helper function for generate_vendorkey_dimgkey() -+++ deinterleave input in chunks of 8 bytes according to pattern, -+++ last block shorter than 8 bytes is appended in reverse order -+++*/ -+++void deinterleave(unsigned char *enk, size_t len, unsigned char *vkey) -+++{ -+++ unsigned char i, pattern = 0; -+++ -+++ while (len >= INTERLEAVE_BLOCK_SIZE) -+++ { -+++ for (i = 0; i < INTERLEAVE_BLOCK_SIZE; i++) -+++ *(vkey + i) = *(enk + interleaving_pattern[pattern][i]); -+++ -+++ vkey += INTERLEAVE_BLOCK_SIZE; -+++ enk += INTERLEAVE_BLOCK_SIZE; -+++ len -= INTERLEAVE_BLOCK_SIZE; -+++ -+++ if (pattern++ >= INTERLEAVE_BLOCK_SIZE) -+++ pattern = 0; -+++ } -+++ -+++ for (i = 0; i < len; i++) -+++ *(vkey + i) = *(enk + (len - i - 1)); -+++} -+++ -+++/* -+++ generate vendor key for COVR-X1860, DIR-X3260, ... -+++ base64 decode enk, pass to deinterleave, result will be in *vkey -+++*/ -+++void generate_vendorkey_dimgkey(const unsigned char *enk, size_t len, unsigned char *vkey) -+++{ -+++ unsigned char *decode_buf = malloc(3 * (len / 4)); -+++ int outlen; -+++ EVP_ENCODE_CTX *base64_ctx = EVP_ENCODE_CTX_new(); -+++ EVP_DecodeInit(base64_ctx); -+++ EVP_DecodeUpdate(base64_ctx, decode_buf, &outlen, enk, len); -+++ EVP_DecodeFinal(base64_ctx, decode_buf + outlen, &outlen); -+++ EVP_ENCODE_CTX_free(base64_ctx); -+++ -+++ // limit deinterleaving output to first 16 bytes -+++ deinterleave(decode_buf, AES_BLOCK_SIZE, vkey); -+++} -+++ -+++int main(int argc, char **argv) -+++{ -+++ if (argc < 3 || argc > 5) { -+++ fprintf(stderr, "Usage:\n" -+++ "\tdlink-sge-image DEVICE_MODEL infile outfile [-d: decrypt]\n\n" -+++ "DEVICE_MODEL can be any of:\n" -+++ "\tCOVR-C1200\n" -+++ "\tCOVR-P2500\n" -+++ "\tCOVR-X1860\n" -+++ "\tDIR-853\n" -+++ "\tDIR-867\n" -+++ "\tDIR-878\n" -+++ "\tDIR-882\n" -+++ "\tDIR-1935\n" -+++ "\tDIR-2150\n" -+++ "\tDIR-X3260\n\n" -+++ "Any other value will default to COVR-C1200/P2500/DIR-8xx keys\n" -+++ "which may work to decrypt images for several further devices,\n" -+++ "however there are currently no private keys known that would\n" -+++ "allow for signing images to be used for flashing those devices.\n\n" -+++ ); -+++ exit(1); -+++ } -+++ -+++ input_file = fopen(argv[2], "rb"); -+++ if (input_file == NULL) { -+++ fprintf(stderr, "Input File %s could not be opened.\n", argv[2]); -+++ exit(1); -+++ } -+++ -+++ output_file = fopen(argv[3], "wb"); -+++ if (input_file == NULL) { -+++ fprintf(stderr, "Output File %s could not be opened.\n", argv[3]); -+++ fclose(input_file); -+++ exit(1); -+++ } -+++ -+++ aes128 = EVP_aes_128_cbc(); -+++ -+++ if (strncmp(argv[1], "COVR-X1860", 10) == 0) -+++ { -+++ generate_vendorkey_dimgkey(enk_covrx1860, sizeof(enk_covrx1860), &vendor_key[0]); -+++ rsa_private_bio = BIO_new_mem_buf(key_covrx1860_pem, -1); -+++ } -+++ else if (strncmp(argv[1], "DIR-X3260", 9) == 0) -+++ { -+++ generate_vendorkey_dimgkey(enk_dirx3260, sizeof(enk_dirx3260), &vendor_key[0]); -+++ rsa_private_bio = BIO_new_mem_buf(key_dirx3260_pem, -1); -+++ } -+++ else if (strncmp(argv[1], "DIR-1260", 8) == 0) -+++ { -+++ generate_vendorkey_legacy(&vendor_key[0]); -+++ rsa_private_bio = BIO_new_mem_buf(key_dir1260_pem, -1); -+++ } -+++ else if (strncmp(argv[1], "DIR-2150", 8) == 0) -+++ { -+++ generate_vendorkey_legacy(&vendor_key[0]); -+++ rsa_private_bio = BIO_new_mem_buf(key_dir2150_pem, -1); -+++ } -+++ else -+++ { -+++ /* COVR-C1200, COVR-P2500, DIR-853, DIR-867, DIR-878, DIR-882, DIR-1935 */ -+++ generate_vendorkey_legacy(&vendor_key[0]); -+++ rsa_private_bio = BIO_new_mem_buf(key_legacy_pem, -1); -+++ } -+++ -+++ printf("\nvendor_key: "); -+++ for (i = 0; i < AES_BLOCK_SIZE; i++) -+++ printf("%02x", vendor_key[i]); -+++ -+++ if (argc == 5 && strncmp(argv[4], "-d", 2) == 0) -+++ image_decrypt(); -+++ else -+++ image_encrypt(); -+++} -++--- /dev/null -+++++ b/src/dlink-sge-image.h -++@@ -0,0 +1,349 @@ -+++/* SPDX-License-Identifier: GPL-2.0-only */ -+++ -+++const unsigned char key1[] = -+++ "\x35\x87\x90\x03\x45\x19\xf8\xc8\x23\x5d\xb6\x49\x28\x39\xa7\x3f"; -+++ -+++const unsigned char key2[] = -+++ "\xc8\xd3\x2f\x40\x9c\xac\xb3\x47\xc8\xd2\x6f\xdc\xb9\x09\x0b\x3c"; -+++ -+++const unsigned char iv[] = -+++ "\x98\xc9\xd8\xf0\x13\x3d\x06\x95\xe2\xa7\x09\xc8\xb6\x96\x82\xd4"; -+++ -+++const unsigned char salt[] = -+++ "\x67\xc6\x69\x73\x51\xff\x4a\xec\x29\xcd\xba\xab\xf2\xfb\xe3\x46"; -+++ -+++/* -+++ enk.txt as found in GPL tarball: -+++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/enk.txt -+++*/ -+++const unsigned char enk_covrx1860[] = -+++ "NE1oIS1lKzkkIzZkbX49KTMsMWFkJXEybjheJiN6KjIwNjgx"; -+++ -+++/* -+++ enk.txt as found in GPL tarball: -+++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/enk.txt -+++*/ -+++const unsigned char enk_dirx3260[] = -+++ "NF5yKy10JTl+bSkhNj1kTTIkI3FhIyUsJDU0czMyZmR6Jl4jMzI4KjA2Mg=="; -+++ -+++#define INTERLEAVE_BLOCK_SIZE 8 -+++const unsigned char interleaving_pattern[INTERLEAVE_BLOCK_SIZE][INTERLEAVE_BLOCK_SIZE] = { -+++ {2, 5, 7, 4, 0, 6, 1, 3}, -+++ {7, 3, 2, 6, 4, 5, 1, 0}, -+++ {5, 1, 6, 7, 3, 0, 4, 2}, -+++ {0, 3, 7, 6, 5, 4, 2, 1}, -+++ {1, 5, 7, 0, 3, 2, 6, 4}, -+++ {3, 6, 2, 5, 4, 7, 1, 0}, -+++ {6, 0, 5, 1, 3, 4, 2, 7}, -+++ {4, 6, 7, 3, 2, 0, 1, 5} -+++}; -+++ -+++/* -+++ key.pem as found in GPL tarball, e.g.: -+++ COVRP2500A1_FW101/COVRP2500_GPL_Release/package/tw-prog.priv/imgcrypt/key.pem -+++ encrypted with passphrase: "12345678" -+++*/ -+++const unsigned char key_legacy_pem[] = R"( -+++-----BEGIN RSA PRIVATE KEY----- -+++Proc-Type: 4,ENCRYPTED -+++DEK-Info: AES-256-CBC,EAA1FD02CDBC7AA7E62AC821D47823F2 -+++ -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 -+++-----END RSA PRIVATE KEY----- -+++)"; -+++ -+++/* -+++ key.pem as found in GPL tarball: -+++ DIR1260_GPL_Release/vendors/DIR-1260/imgkey/key.pem -+++ encrypted with passphrase: "12345678" -+++*/ -+++const unsigned char key_dir1260_pem[] = R"( -+++-----BEGIN RSA PRIVATE KEY----- -+++Proc-Type: 4,ENCRYPTED -+++DEK-Info: AES-256-CBC,FFC890207BA9F13F6CE13F8EF7E69802 -+++ -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 -+++-----END RSA PRIVATE KEY----- -+++)"; -+++ -+++/* -+++ key.pem as found in GPL tarball: -+++ DIR2150_GPL_Release/vendors/DIR-2150/imgkey/key.pem -+++ encrypted with passphrase: "12345678" -+++*/ -+++const unsigned char key_dir2150_pem[] = R"( -+++-----BEGIN RSA PRIVATE KEY----- -+++Proc-Type: 4,ENCRYPTED -+++DEK-Info: AES-256-CBC,314D3C7FB69E7DDEAF084A0A7CA39069 -+++ -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 -+++-----END RSA PRIVATE KEY----- -+++)"; -+++ -+++/* -+++ key.pem as found in GPL tarball: -+++ COVR-X1860_GPL_Release/MTK7621_AX1800_BASE/vendors/COVR-X1860/imgkey/key.pem -+++ encrypted with passphrase: "12345678" -+++*/ -+++const unsigned char key_covrx1860_pem[] = R"( -+++-----BEGIN RSA PRIVATE KEY----- -+++Proc-Type: 4,ENCRYPTED -+++DEK-Info: AES-256-CBC,34CCF1AEF0C34EAC5FFAE6BCF81ABB8D -+++ -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 -+++-----END RSA PRIVATE KEY----- -+++)"; -+++ -+++/* -+++ key.pem as found in GPL tarball, e.g.: -+++ DIR-X3260_GPL_Release/MTK7621_AX1800_BASE/vendors/DIR-X3260/imgkey/key.pem -+++ encrypted with passphrase: "12345678" -+++*/ -+++const unsigned char key_dirx3260_pem[] = R"( -+++-----BEGIN RSA PRIVATE KEY----- -+++Proc-Type: 4,ENCRYPTED -+++DEK-Info: AES-256-CBC,DDAC1FE060CB240242046BDFEEE17E44 -+++ -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 -+++-----END RSA PRIVATE KEY----- -+++)"; -diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch -new file mode 100644 -index 00000000..263f2408 ---- /dev/null -+++ b/patches/openwrt/0008-add-Dlink-COVR-X1860.patch -@@ -0,0 +1,319 @@ -+From: Roland <75312877+RolandoMagico@users.noreply.github.com> -+Date: Mon, 26 Jun 2023 18:03:51 +0200 -+Subject: add Dlink COVR-X1860 -+ -+diff --git a/include/image-commands.mk b/include/image-commands.mk -+index dc6ee6e7c160c0935c3d72fb26b88c4ebcf4b028..6666eddf8f72d3ad49aafe1b08d79c26e0089945 100644 -+--- a/include/image-commands.mk -++++ b/include/image-commands.mk -+@@ -226,6 +226,11 @@ define Build/copy-file -+ cat "$(1)" > "$@" -+ endef -+ -++define Build/dlink-sge-image -++ $(STAGING_DIR_HOST)/bin/dlink-sge-image $(1) $@ $@.enc -++ mv $@.enc $@ -++endef -++ -+ define Build/edimax-header -+ $(STAGING_DIR_HOST)/bin/mkedimaximg -i $@ -o $@.new $(1) -+ @mv $@.new $@ -+diff --git a/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts -+new file mode 100644 -+index 0000000000000000000000000000000000000000..c06c5e36baaedacaef339bf91a08dabbba732898 -+--- /dev/null -++++ b/target/linux/ramips/dts/mt7621_dlink_covr-x1860-a1.dts -+@@ -0,0 +1,186 @@ -++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT -++ -++#include "mt7621.dtsi" -++ -++#include -++#include -++ -++/ { -++ compatible = "dlink,covr-x1860-a1", "mediatek,mt7621-soc"; -++ model = "D-Link COVR-X1860 A1"; -++ -++ aliases { -++ led-boot = &status_orange; -++ led-failsafe = &status_red; -++ led-running = &status_white; -++ led-upgrade = &status_red; -++ }; -++ -++ chosen { -++ bootargs = "console=ttyS0,115200"; -++ }; -++ -++ keys { -++ compatible = "gpio-keys"; -++ -++ reset { -++ label = "reset"; -++ linux,code = ; -++ gpios = <&gpio 15 GPIO_ACTIVE_LOW>; -++ }; -++ -++ wps { -++ label = "wps"; -++ linux,code = ; -++ gpios = <&gpio 8 GPIO_ACTIVE_LOW>; -++ }; -++ }; -++ -++ leds { -++ compatible = "gpio-leds"; -++ -++ status_white: power { -++ label = "white:status"; -++ gpios = <&gpio 16 GPIO_ACTIVE_LOW>; -++ }; -++ -++ status_orange: status_orange { -++ label = "orange:status"; -++ gpios = <&gpio 13 GPIO_ACTIVE_LOW>; -++ default-state = "on"; -++ }; -++ -++ status_red: status_red { -++ label = "red:status"; -++ gpios = <&gpio 14 GPIO_ACTIVE_LOW>; -++ }; -++ }; -++ -++ virtual_flash { -++ compatible = "mtd-concat"; -++ -++ devices = <&fwconcat0 &fwconcat1>; -++ -++ partitions { -++ compatible = "fixed-partitions"; -++ #address-cells = <1>; -++ #size-cells = <1>; -++ -++ partition@0 { -++ label = "ubi"; -++ reg = <0x0 0x0>; -++ }; -++ }; -++ }; -++}; -++ -++&nand { -++ status = "okay"; -++ -++ partitions { -++ compatible = "fixed-partitions"; -++ #address-cells = <1>; -++ #size-cells = <1>; -++ -++ partition@0 { -++ label = "bootloader"; -++ reg = <0x0 0x80000>; -++ read-only; -++ }; -++ -++ partition@80000 { -++ label = "config"; -++ reg = <0x80000 0x80000>; -++ read-only; -++ }; -++ -++ factory: partition@100000 { -++ label = "factory"; -++ reg = <0x100000 0x80000>; -++ read-only; -++ }; -++ -++ partition@180000 { -++ label = "config2"; -++ reg = <0x180000 0x40000>; -++ read-only; -++ }; -++ -++ partition@1c0000 { -++ label = "kernel"; -++ reg = <0x1c0000 0x800000>; -++ }; -++ -++ fwconcat0: partition@9c0000 { -++ label = "fwconcat0"; -++ reg = <0x9c0000 0x2000000>; -++ }; -++ -++ partition@29c0000 { -++ label = "kernel2"; -++ reg = <0x29c0000 0x800000>; -++ read-only; -++ }; -++ -++ fwconcat1: partition@31c0000 { -++ label = "fwconcat1"; -++ reg = <0x31c0000 0x2a00000>; -++ }; -++ -++ partition@5bc0000 { -++ label = "private"; -++ reg = <0x5bc0000 0x1400000>; -++ read-only; -++ }; -++ -++ partition@6fc0000 { -++ label = "mydlink"; -++ reg = <0x6fc0000 0x600000>; -++ read-only; -++ }; -++ -++ partition@75c0000 { -++ label = "myconfig"; -++ reg = <0x75c0000 0xa00000>; -++ read-only; -++ }; -++ }; -++}; -++ -++&pcie { -++ status = "okay"; -++}; -++ -++&pcie1 { -++ wifi@0,0 { -++ compatible = "mediatek,mt76"; -++ reg = <0x0000 0 0 0 0>; -++ mediatek,mtd-eeprom = <&factory 0x0>; -++ mediatek,disable-radar-background; -++ }; -++}; -++ -++&gmac1 { -++ status = "okay"; -++ phy-handle = <ðphy4>; -++}; -++ -++&mdio { -++ ethphy4: ethernet-phy@4 { -++ reg = <4>; -++ }; -++}; -++ -++&switch0 { -++ ports { -++ port@0 { -++ status = "okay"; -++ label = "internet"; -++ }; -++ -++ port@2 { -++ status = "okay"; -++ label = "ethernet"; -++ }; -++ }; -++}; -+diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk -+index 962d7ef44017d1ead2a44eb67cac041220709ca4..e3799e9319404297bc1faf945dab83117b6d9499 100644 -+--- a/target/linux/ramips/image/mt7621.mk -++++ b/target/linux/ramips/image/mt7621.mk -+@@ -9,6 +9,14 @@ DEFAULT_SOC := mt7621 -+ -+ DEVICE_VARS += ELECOM_HWNAME LINKSYS_HWNAME DLINK_HWID -+ -++define Build/append-dlink-covr-metadata -++ echo -ne '{"supported_devices": "$(1)", "firmware": "' > $@metadata.tmp -++ $(MKHASH) md5 "$@" | head -c32 >> $@metadata.tmp -++ echo '"}' >> $@metadata.tmp -++ fwtool -I $@metadata.tmp $@ -++ rm $@metadata.tmp -++endef -++ -+ define Build/arcadyan-trx -+ echo -ne "hsqs" > $@.hsqs -+ $(eval trx_magic=$(word 1,$(1))) -+@@ -581,6 +589,31 @@ define Device/cudy_x6-v2 -+ endef -+ TARGET_DEVICES += cudy_x6-v2 -+ -++define Device/dlink_covr-x1860-a1 -++ $(Device/dsa-migration) -++ BLOCKSIZE := 128k -++ PAGESIZE := 2048 -++ KERNEL_SIZE := 8192k -++ IMAGE_SIZE := 40960k -++ DEVICE_VENDOR := D-Link -++ DEVICE_MODEL := COVR-X1860 -++ DEVICE_VARIANT := A1 -++ DEVICE_PACKAGES := kmod-mt7915-firmware -++ UBINIZE_OPTS := -E 5 -++ KERNEL_LOADADDR := 0x82000000 -++ KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \ -++ fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | \ -++ append-squashfs4-fakeroot -++ IMAGES += factory.bin recovery.bin -++ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata -++ IMAGE/recovery.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \ -++ append-ubi | check-size -++ IMAGE/factory.bin := $$(IMAGE/recovery.bin) | \ -++ append-dlink-covr-metadata $$(DEVICE_MODEL) | \ -++ dlink-sge-image $$(DEVICE_MODEL) -++endef -++TARGET_DEVICES += dlink_covr-x1860-a1 -++ -+ define Device/dlink_dap-1620-b1 -+ DEVICE_VENDOR := D-Link -+ DEVICE_MODEL := DAP-1620 -+diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+index 11a7c9465a333ee69b62f59f5e8fd6035c42f51b..feb2a196f582c7a49ae074ce2f387e40a3c8c102 100644 -+--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -++++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network -+@@ -93,6 +93,9 @@ ramips_setup_interfaces() -+ zyxel,nt7101) -+ ucidef_set_interfaces_lan_wan "lan" "wan" -+ ;; -++ dlink,covr-x1860-a1) -++ ucidef_set_interfaces_lan_wan "ethernet" "internet" -++ ;; -+ gnubee,gb-pc1) -+ ucidef_set_interface_lan "ethblack ethblue" -+ ;; -+@@ -197,6 +200,11 @@ ramips_setup_macs() -+ lan_mac=$wan_mac -+ label_mac=$wan_mac -+ ;; -++ dlink,covr-x1860-a1) -++ label_mac=$(mtd_get_mac_ascii config2 factory_mac) -++ wan_mac=$label_mac -++ lan_mac=$label_mac -++ ;; -+ dlink,dir-860l-b1) -+ lan_mac=$(mtd_get_mac_ascii factory lanmac) -+ wan_mac=$(mtd_get_mac_ascii factory wanmac) -+diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -+index 3467e783f0482621ee933f1abcd7be780854bb38..79a521b4126e648aa7afbdc8ef7bb9bc70e34fad 100644 -+--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -++++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac -+@@ -41,6 +41,13 @@ case "$board" in -+ [ "$PHYNBR" = "1" ] && \ -+ macaddr_add $lan_mac_addr 2 > /sys${DEVPATH}/macaddress -+ ;; -++ dlink,covr-x1860-a1) -++ label_mac=$(mtd_get_mac_ascii config2 factory_mac) -++ [ "$PHYNBR" = "0" ] && \ -++ macaddr_add $label_mac 1 > /sys${DEVPATH}/macaddress -++ [ "$PHYNBR" = "1" ] && \ -++ macaddr_add $label_mac 2 > /sys${DEVPATH}/macaddress -++ ;; -+ dlink,dap-x1860-a1) -+ hw_mac_addr="$(mtd_get_mac_binary factory 0x4)" -+ [ "$PHYNBR" = "0" ] && \ -+diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh -+index 5d8305b788cce391335f2563d60c999f4d0b27de..6dc0f594afc66bc4f36c19165bc3a8582d40389d 100755 -+--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh -++++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh -+@@ -63,6 +63,7 @@ platform_do_upgrade() { -+ beeline,smartbox-turbo|\ -+ beeline,smartbox-turbo-plus|\ -+ belkin,rt1800|\ -++ dlink,covr-x1860-a1|\ -+ dlink,dap-x1860-a1|\ -+ dlink,dir-1960-a1|\ -+ dlink,dir-2640-a1|\ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index c5708838..01b9b94c 100644 +index 3a2c1cd2..630fd7ab 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -33,6 +33,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { +@@ -37,6 +37,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { -- D-Link diff --git a/patches/cellular.patch b/patches/cellular.patch index 5de730e..98c6799 100644 --- a/patches/cellular.patch +++ b/patches/cellular.patch @@ -1,8 +1,8 @@ diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -index 0099d1d8..7301eff2 100755 +index 27294c4d..7301eff2 100755 --- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular +++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular -@@ -49,10 +49,12 @@ if platform.match('ath79', 'nand', { +@@ -49,6 +49,7 @@ if platform.match('ath79', 'nand', { setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) elseif platform.match('ath79', 'nand', { 'zte,mf281', @@ -10,16 +10,11 @@ index 0099d1d8..7301eff2 100755 }) then setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15) elseif platform.match('ipq40xx', 'generic', { - 'glinet,gl-ap1300', -+ 'zte,mf289f', - }) then - setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15) - elseif platform.match('ramips', 'mt7621', { diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index 52d9f1b1..6b4b14ed 100644 +index 7ba3103f..37b25bb0 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -@@ -77,11 +77,13 @@ end +@@ -76,6 +76,7 @@ end function M.is_cellular_device() if M.match('ath79', 'nand', { 'zte,mf281', @@ -27,9 +22,3 @@ index 52d9f1b1..6b4b14ed 100644 'glinet,gl-xe300', }) then return true - elseif M.match('ipq40xx', 'generic', { - 'glinet,gl-ap1300', -+ 'zte,mf289f', - }) then - return true - elseif M.match('ramips', 'mt7621', { diff --git a/patches/gluon-makefile.patch b/patches/gluon-makefile.patch index fa1f78d..5e058f6 100644 --- a/patches/gluon-makefile.patch +++ b/patches/gluon-makefile.patch @@ -1,8 +1,8 @@ diff --git a/Makefile b/Makefile -index 695b1bc7..00dd9ceb 100644 +index 5fa37a43..c5206668 100644 --- a/Makefile +++ b/Makefile -@@ -111,11 +111,11 @@ update-modules: FORCE +@@ -121,11 +121,11 @@ update-modules: FORCE update-ci: FORCE @$(GLUON_ENV) scripts/update-ci.sh diff --git a/patches/modules.patch b/patches/modules.patch new file mode 100644 index 0000000..86bae96 --- /dev/null +++ b/patches/modules.patch @@ -0,0 +1,16 @@ +diff --git a/modules b/modules +index 8b77b64d..c0da2c9a 100644 +--- a/modules ++++ b/modules +@@ -1,8 +1,8 @@ + GLUON_FEEDS='gluon packages routing' + +-OPENWRT_REPO=https://github.com/openwrt/openwrt.git +-OPENWRT_BRANCH=openwrt-23.05 +-OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc ++OPENWRT_REPO=https://github.com/maurerle/openwrt.git ++OPENWRT_BRANCH=covr-x1860 ++OPENWRT_COMMIT=59ade364e3de2a3353e7050004d4165dd48c3ab1 + + PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git + PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa diff --git a/patches/ssid-changer.patch b/patches/ssid-changer.patch deleted file mode 100644 index a2389f9..0000000 --- a/patches/ssid-changer.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch -new file mode 100644 -index 00000000..e920ea4e ---- /dev/null -+++ b/patches/packages/ffac/0001-try-to-fix-ssid-changer-for-23.05-devices.patch -@@ -0,0 +1,37 @@ -+From: FFAC -+Date: Wed, 18 Oct 2023 11:41:27 +0000 -+Subject: try to fix ssid-changer for 23.05 devices -+ -+diff --git a/ffac-ssid-changer/shsrc/ssid-changer.sh b/ffac-ssid-changer/shsrc/ssid-changer.sh -+index f8b80fdb448e5e36093f8146f88c16ee0f2066de..4262e23b083cb5b51c3adb9be34f9c621bf08714 100755 -+--- a/ffac-ssid-changer/shsrc/ssid-changer.sh -++++ b/ffac-ssid-changer/shsrc/ssid-changer.sh -+@@ -10,7 +10,7 @@ safety_exit() { -+ pgrep -f autoupdater >/dev/null && safety_exit 'autoupdater running' -+ UT=$(sed 's/\..*//g' /proc/uptime) -+ [ $UT -gt 60 ] || safety_exit 'less than one minute' -+-[ $(find /var/run -name hostapd-phy* | wc -l) -gt 0 ] || safety_exit 'no hostapd-phy*' -++[ $(find /var/run -name hostapd-* | wc -l) -gt 0 ] || safety_exit 'no hostapd-*' -+ -+ # only once every timeframe minutes the SSID will change to the Offline-SSID -+ # (set to 1 minute to change immediately every time the router gets offline) -+@@ -120,8 +120,8 @@ HUP_NEEDED=0 -+ if [ "$CHECK" -gt 0 ] || [ "$DISABLED" = '1' ]; then -+ echo "node is online" -+ LOOP=1 -+- # check status for all physical devices -+- for HOSTAPD in $(ls /var/run/hostapd-phy*); do -++ # check status for all physical and wireless devices -++ for HOSTAPD in $(ls /var/run/hostapd-*); do -+ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')" -+ LOOP=$((LOOP+1)) -+ CURRENT_SSID="$(grep "^ssid=$ONLINE_SSID" $HOSTAPD | cut -d"=" -f2)" -+@@ -165,7 +165,7 @@ elif [ "$CHECK" -eq 0 ]; then -+ if [ $OFF_COUNT -ge $(($T / 2)) ]; then -+ # node was offline more times than half of switch_timeframe (or than $FIRST) -+ LOOP=1 -+- for HOSTAPD in $(ls /var/run/hostapd-phy*); do -++ for HOSTAPD in $(ls /var/run/hostapd-*); do -+ ONLINE_SSID="$(echo $ONLINE_SSIDs | awk -F '~' -v l=$((LOOP*2)) '{print $l}')" -+ LOOP=$((LOOP+1)) -+ CURRENT_SSID="$(grep "^ssid=$OFFLINE_SSID" $HOSTAPD | cut -d"=" -f2)" diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index bbadb62..7da5daa 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,22 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index aafcb22f..71457772 100644 +index 626b6520..9c0f12fd 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -57,6 +57,13 @@ device('avm-fritz-wlan-repeater-450e', 'avm_fritz450e', { - factory = false, - }) - -+device('avm-fritz-wlan-repeater-1750e', 'avm_fritz1750e', { -+ packages = ATH10K_PACKAGES_SMALLBUFFERS_QCA9880, -+ factory = false, -+ broken = true, -- OOM with 5GHz enabled in most environments -+ class = 'tiny', -- 64M ath9k + ath10k -+}) -+ - -- Buffalo - - device('buffalo-wzr-hp-ag300h', 'buffalo_wzr-hp-ag300h') -@@ -468,6 +475,15 @@ device('tp-link-eap225-outdoor-v1', 'tplink_eap225-outdoor-v1', { +@@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -32,7 +18,7 @@ index aafcb22f..71457772 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -581,3 +597,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -604,3 +613,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { }) device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') diff --git a/patches/targets-ath79-mikrotik.patch b/patches/targets-ath79-mikrotik.patch index 8ba9f0f..1f938dc 100644 --- a/patches/targets-ath79-mikrotik.patch +++ b/patches/targets-ath79-mikrotik.patch @@ -1,11 +1,11 @@ diff --git a/targets/ath79-mikrotik b/targets/ath79-mikrotik -index c2002987..974ce347 100644 +index 6d008811..7e59c05c 100644 --- a/targets/ath79-mikrotik +++ b/targets/ath79-mikrotik -@@ -1,3 +1,13 @@ - include 'mikrotik.inc' - +@@ -3,3 +3,13 @@ include 'mikrotik.inc' device('mikrotik-routerboard-951ui-2nd-hap', 'mikrotik_routerboard-951ui-2nd') + + device('mikrotik-routerboard-wapr-2nd', 'mikrotik_routerboard-wapr-2nd') + +device('mikrotik-routerboard-mapl-2nd', 'mikrotik_routerboard-mapl-2nd', { + aliases = {'mikrotik-routerboard-map-lite'}, diff --git a/patches/targets-bcm2711-raspberry-pi-4.patch b/patches/targets-bcm2711-raspberry-pi-4.patch deleted file mode 100644 index 8ca4f48..0000000 --- a/patches/targets-bcm2711-raspberry-pi-4.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/targets/bcm27xx-bcm2711 b/targets/bcm27xx-bcm2711 -new file mode 100644 -index 00000000..90420dd0 ---- /dev/null -+++ b/targets/bcm27xx-bcm2711 -@@ -0,0 +1,9 @@ -+include 'bcm27xx.inc' -+ -+device('raspberry-pi-4-model-b', 'rpi-4', { -+ manifest_aliases = { -+ 'raspberry-pi-4-model-b-rev-1.1', -+ 'raspberry-pi-4-model-b-rev-1.2', -+ 'raspberry-pi-4-model-b-rev-1.4', -+ }, -+}) diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 4d076b3..0543daf 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,47 +1,5 @@ -diff --git a/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch -new file mode 100644 -index 00000000..dad7e10b ---- /dev/null -+++ b/patches/openwrt/0007-ipq4019-fix-support-for-AVM-FRITZ-Repeater-3000.patch -@@ -0,0 +1,24 @@ -+From: Alexander Friese -+Date: Wed, 12 Jul 2023 16:46:01 +0200 -+Subject: ipq4019: fix support for AVM FRITZ!Repeater 3000 -+ -+new versions of the device have NAND with 8bit ECC -+which was not yet supported before. This change removes -+ECC restrictions. -+ -+Signed-off-by: Alexander Friese -+ -+diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts -+index 41dec72542421d8b2228e3f0432460e75bbcc329..8d88bc1521109f5469a0a7ce893af4b92b4f39ed 100644 -+--- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts -++++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-fritzrepeater-3000.dts -+@@ -121,9 +121,6 @@ -+ status = "okay"; -+ -+ nand@0 { -+- /delete-property/ nand-ecc-strength; -+- /delete-property/ nand-ecc-step-size; -+- -+ partitions { -+ compatible = "fixed-partitions"; -+ #address-cells = <1>; -diff --git a/patches/openwrt/0007-procd-add-Dlink-sge-image.patch b/patches/openwrt/0008-procd-add-Dlink-sge-image.patch -similarity index 100% -rename from patches/openwrt/0007-procd-add-Dlink-sge-image.patch -rename to patches/openwrt/0008-procd-add-Dlink-sge-image.patch -diff --git a/patches/openwrt/0008-add-Dlink-COVR-X1860.patch b/patches/openwrt/0009-add-Dlink-COVR-X1860.patch -similarity index 100% -rename from patches/openwrt/0008-add-Dlink-COVR-X1860.patch -rename to patches/openwrt/0009-add-Dlink-COVR-X1860.patch -diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch -similarity index 100% -rename from patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch -rename to patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index b6a49ca7..68cb4d55 100644 +index 068f538b..6e7c8bd4 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic @@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = { @@ -133,20 +91,11 @@ index b6a49ca7..68cb4d55 100644 '-ath10k-firmware-qca9887-ct', '-ath10k-board-qca9887', }, -@@ -120,6 +181,16 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', { - }) +@@ -123,6 +184,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', { + -- ZTE - -+-- ZTE -+ -+device('zte-mf289f', 'zte_mf289f', { + device('zte-mf289f', 'zte_mf289f', { + packages = ATH10K_PACKAGES_IPQ40XX_QCA9984, -+ broken = true, -- case must be opened to install -+ -- only hw rev T2 was tested, hw rev T1 wasn't (implication: 5GHz was never verified for T1, everything else should be working) -+ factory = false, -+}) -+ -+ - -- ZyXEL - - device('zyxel-nbg6617', 'zyxel_nbg6617') + broken = true, -- case must be opened to install + factory = false, + }) diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch index 772ae11..246bdb4 100644 --- a/patches/targets-ipq40xx-mikrotik.patch +++ b/patches/targets-ipq40xx-mikrotik.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index ba4b5b48..52d9f1b1 100644 +index 37b25bb0..c81913a8 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua @@ -26,6 +26,8 @@ function M.is_outdoor_device() diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index 0a6ddf1..67519ec 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -1,8 +1,8 @@ -diff --git a/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +diff --git a/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch new file mode 100644 index 00000000..9b7a21f9 --- /dev/null -+++ b/patches/openwrt/0009-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch ++++ b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch @@ -0,0 +1,53 @@ +From: Felix Baumann +Date: Tue, 28 Feb 2023 04:21:07 +0100 diff --git a/patches/targets-mk.patch b/patches/targets-mk.patch index 3adb047..c2f3d09 100644 --- a/patches/targets-mk.patch +++ b/patches/targets-mk.patch @@ -1,12 +1,11 @@ diff --git a/targets/targets.mk b/targets/targets.mk -index 3a885f22..52186339 100644 +index 14955134..7a5a9b2e 100644 --- a/targets/targets.mk +++ b/targets/targets.mk -@@ -26,5 +26,8 @@ $(eval $(call GluonTarget,x86,64)) - - ifneq ($(BROKEN),) +@@ -29,5 +29,7 @@ $(eval $(call GluonTarget,x86,64)) + ifeq ($(BROKEN),1) $(eval $(call GluonTarget,bcm27xx,bcm2710)) # BROKEN: Untested -+$(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: Untested + $(eval $(call GluonTarget,bcm27xx,bcm2711)) # BROKEN: No 11s support, no reset button, sys LED issues +$(eval $(call GluonTarget,ipq40xx,chromium)) # BROKEN: Untested +$(eval $(call GluonTarget,ipq807x,generic)) # BROKEN: Untested $(eval $(call GluonTarget,mvebu,cortexa9)) # BROKEN: No 11s support diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index a8a5540..ebe3f02 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 01b9b94c..630fd7ab 100644 +index c5708838..3a2c1cd2 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,7 +13,7 @@ index 01b9b94c..630fd7ab 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { +@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { -- TP-Link @@ -22,7 +22,7 @@ index 01b9b94c..630fd7ab 100644 device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { broken = true, -- LAN LED not working - review after resolving #2756 }) -@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { +@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { factory = false, }) @@ -33,7 +33,7 @@ index 01b9b94c..630fd7ab 100644 -- Wavlink -@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN diff --git a/release.mk b/release.mk index f4f9c61..61962a8 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := d517e0ff7c065fde70e098f2659a828c02f13ce2 # master +GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master \ No newline at end of file From a5885b335c79d9288591f93802147a7cfa7fa51f Mon Sep 17 00:00:00 2001 From: FFAC Date: Fri, 5 Jan 2024 07:07:50 +0000 Subject: [PATCH 112/129] use gluon tls, fix covr-x1860, update gluon and modules --- image-customization.lua | 13 +++++-------- modules | 2 +- patches/modules.patch | 4 ++-- release.mk | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/image-customization.lua b/image-customization.lua index 782f542..a528cf3 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -19,6 +19,7 @@ packages { 'iwinfo', 'ffac-ssid-changer', 'ffac-wg-registration', + 'ff-web-ap-timer', 'respondd-module-airtime', } @@ -100,12 +101,6 @@ pkgs_pci = { 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 } -pkgs_tls = { - 'ca-bundle', - 'libustream-openssl', - 'openssh-sftp-server' -} - include_tls = not device({ 'd-link-dir825b1', 'tp-link-archer-c58-v1', @@ -135,12 +130,14 @@ include_tls = not device({ 'tp-link-archer-c20-v1', 'tp-link-archer-c20i', 'tp-link-archer-c50-v1', + 'tp-link-archer-c60-v1', 'netgear-r6020' }) if include_tls then - packages(pkgs_tls) + features {'tls'} + packages {'openssh-sftp-server'} end include_usb = true @@ -211,4 +208,4 @@ end if target('bcm27xx') then packages(pkgs_hid) -end \ No newline at end of file +end diff --git a/modules b/modules index f47359e..529ca21 100644 --- a/modules +++ b/modules @@ -1,5 +1,5 @@ GLUON_SITE_FEEDS="community" PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git -PACKAGES_COMMUNITY_COMMIT=d7554980f944273bb1e51c40a33aa6662130c6ab +PACKAGES_COMMUNITY_COMMIT=661f553c12785f3287fab6018487a55efda55071 PACKAGES_COMMUNITY_BRANCH=master diff --git a/patches/modules.patch b/patches/modules.patch index 86bae96..bfae0a8 100644 --- a/patches/modules.patch +++ b/patches/modules.patch @@ -9,8 +9,8 @@ index 8b77b64d..c0da2c9a 100644 -OPENWRT_BRANCH=openwrt-23.05 -OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc +OPENWRT_REPO=https://github.com/maurerle/openwrt.git -+OPENWRT_BRANCH=covr-x1860 -+OPENWRT_COMMIT=59ade364e3de2a3353e7050004d4165dd48c3ab1 ++OPENWRT_BRANCH=covr-x1860-gluon ++OPENWRT_COMMIT=02d87a058393ce714b6ffd3c63cc3823d42987f4 PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa diff --git a/release.mk b/release.mk index 61962a8..89a7802 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master \ No newline at end of file +GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master From 681e7822ba1ef89d3b9609766eb6df13a49b4cdc Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Fri, 5 Jan 2024 09:08:40 +0100 Subject: [PATCH 113/129] update release notes remove old genpkglist from readme --- CHANGELOG.md | 16 ++++++++++++++++ README.md | 10 ---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93110c6..6a3552a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Freifunk Aachen Firmware Changelog +## v2023.2.0-8 + - package configuration with image-customization.lua + - switch to maurerle/covr-x1860-gluon openwrt base + - remove obsolete patches + - switch from openssl to mbedtls (gluon-tls) + - add ff-web-ap-timer + - update to latest community-packages + - update gluon release to v2023.2 + - add ffda-network-setup-mode for zyxel-nwa55axe + - fix opkg key folder creation + +## v2023.2.0-7 + - fix building wax218 + - add FR3000, FR1750e, Xiaomi AX3600, EAP225v3 + - add ZTE MF289F, TP-Link Archer AX23, Ubiquiti UniFi nanoHD, Mikrotik WAP AC (D2), Netgear WAX218, Google WiFi (Gale) + ## v2023.2.0-6 - update openwrt to nearly v23.05.0-rc4 - update community-packages diff --git a/README.md b/README.md index 7e8b6b7..69df56f 100644 --- a/README.md +++ b/README.md @@ -17,16 +17,6 @@ A single target can be built using: ## CHANGELOG The [CHANGELOG](./CHANGELOG.md) can be found [here](./CHANGELOG.md) -## Update site.mk packages - -To update the site.mk packages, the `genpkglist.py` can be executed from the build server like: - -```console -~/site-ffac$ ./contrib/genpkglist.py -``` - -The output must then be appended to the end of the `site.mk` - Currently outdated further information can be found in the Freifunk Wiki[^wiki] From d32c7b45fe26fd77662193b28db888cac8b0528b Mon Sep 17 00:00:00 2001 From: FFAC Date: Fri, 5 Jan 2024 14:37:01 +0000 Subject: [PATCH 114/129] remove excluding devices from tls - use tiny add hid packages for x86 --- image-customization.lua | 44 ++++------------------------------------- 1 file changed, 4 insertions(+), 40 deletions(-) diff --git a/image-customization.lua b/image-customization.lua index a528cf3..7146e60 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -37,8 +37,10 @@ if device({ end if not device_class('tiny') then + features {'tls'} packages { - 'ffac-autoupdater-wifi-fallback' + 'ffac-autoupdater-wifi-fallback', + 'openssh-sftp-server' } end @@ -101,45 +103,6 @@ pkgs_pci = { 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 } -include_tls = not device({ - 'd-link-dir825b1', - 'tp-link-archer-c58-v1', - 'tp-link-archer-c25-v1', - 'tp-link-archer-c2-v3', - 'tp-link-archer-c6-v2-eu-ru-jp', - 'tp-link-archer-d50-v1', - 'tp-link-cpe210-v1', - 'tp-link-cpe210-v2', - 'tp-link-cpe210-v3', - 'tp-link-cpe220-v3', - 'tp-link-cpe510-v1', - 'tp-link-cpe510-v2', - 'tp-link-cpe510-v3', - 'tp-link-tl-wr902ac-v1', - 'tp-link-wbs210-v1', - 'tp-link-wbs210-v2', - 'tp-link-wbs510-v1', - 'ubiquiti-nanostation-m-xw', - 'ubiquiti-nanobeam-m5-xw', - 'ubiquiti-nanostation-loco-m-xw', - 'ubiquiti-unifi-ap', - - 'netgear-ex3700', - 'nexx-wt3020-8m', - 'tp-link-archer-c2-v1', - 'tp-link-archer-c20-v1', - 'tp-link-archer-c20i', - 'tp-link-archer-c50-v1', - 'tp-link-archer-c60-v1', - - 'netgear-r6020' -}) - -if include_tls then - features {'tls'} - packages {'openssh-sftp-server'} -end - include_usb = true -- 7M usable firmware space + USB port @@ -204,6 +167,7 @@ end if target('x86') and not target('x86', 'legacy') then packages(pkgs_pci) + packages(pkgs_hid) end if target('bcm27xx') then From f0f23a669fbcbc0822a0ee1cb47ade0f4a5dc073 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Fri, 5 Jan 2024 15:49:13 +0100 Subject: [PATCH 115/129] image-customization: change indentation to spaces --- image-customization.lua | 232 ++++++++++++++++++++-------------------- 1 file changed, 118 insertions(+), 114 deletions(-) diff --git a/image-customization.lua b/image-customization.lua index 7146e60..5dad5ca 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -1,175 +1,179 @@ features { - 'autoupdater', - 'ebtables-filter-multicast', - 'ebtables-filter-ra-dhcp', - 'ebtables-limit-arp', - 'mesh-batman-adv-15', - 'mesh-vpn-wireguard', - 'respondd', - 'status-page', - 'web-advanced', - 'web-wizard', - 'config-mode-geo-location-osm', - 'radv-filterd', - 'radvd', - 'web-private-wifi', + 'autoupdater', + 'ebtables-filter-multicast', + 'ebtables-filter-ra-dhcp', + 'ebtables-limit-arp', + 'mesh-batman-adv-15', + 'mesh-vpn-wireguard', + 'respondd', + 'status-page', + 'web-advanced', + 'web-wizard', + 'config-mode-geo-location-osm', + 'radv-filterd', + 'radvd', + 'web-private-wifi', } packages { - 'iwinfo', - 'ffac-ssid-changer', - 'ffac-wg-registration', - 'ff-web-ap-timer', - 'respondd-module-airtime', + 'iwinfo', + 'ffac-ssid-changer', + 'ffac-wg-registration', + 'ff-web-ap-timer', + 'respondd-module-airtime', } if device({ - 'zte,mf281', - 'glinet,gl-xe300', - 'glinet,gl-ap1300', - 'zte,mf289f', - 'wavlink,ws-wn572hp3-4g', - 'tplink,tl-mr6400-v5', + 'zte,mf281', + 'glinet,gl-xe300', + 'glinet,gl-ap1300', + 'zte,mf289f', + 'wavlink,ws-wn572hp3-4g', + 'tplink,tl-mr6400-v5', }) then - features { - 'web-cellular' - } + features { + 'web-cellular' + } end if not device_class('tiny') then - features {'tls'} - packages { - 'ffac-autoupdater-wifi-fallback', - 'openssh-sftp-server' - } + features {'tls'} + packages { + 'ffac-autoupdater-wifi-fallback', + 'openssh-sftp-server' + } end pkgs_usb = { - 'usbutils' + 'usbutils', } pkgs_hid = { - 'kmod-usb-hid', - 'kmod-hid-generic' + 'kmod-usb-hid', + 'kmod-hid-generic', } pkgs_usb_serial = { - 'kmod-usb-serial', - 'kmod-usb-serial-ftdi', - 'kmod-usb-serial-pl2303' + 'kmod-usb-serial', + 'kmod-usb-serial-ftdi', + 'kmod-usb-serial-pl2303', } pkgs_usb_storage = { - 'block-mount', - 'blkid', - 'kmod-fs-ext4', - 'kmod-fs-ntfs', - 'kmod-fs-vfat', - 'kmod-usb-storage', - 'kmod-usb-storage-extras', -- Card Readers - 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP) - 'kmod-nls-base', - 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe) - 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada) - 'kmod-nls-cp850', -- NLS Codepage 850 (Europe) - 'kmod-nls-cp852', -- NLS Codepage 852 (Europe) - 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1) - 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic) - 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9) - 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2) - 'kmod-nls-utf8' -- NLS UTF-8 + 'block-mount', + 'blkid', + 'kmod-fs-ext4', + 'kmod-fs-ntfs', + 'kmod-fs-vfat', + 'kmod-usb-storage', + 'kmod-usb-storage-extras',-- Card Readers + 'kmod-usb-storage-uas', -- USB Attached SCSI (UAS/UASP) + 'kmod-nls-base', + 'kmod-nls-cp1250', -- NLS Codepage 1250 (Eastern Europe) + 'kmod-nls-cp437', -- NLS Codepage 437 (United States, Canada) + 'kmod-nls-cp850', -- NLS Codepage 850 (Europe) + 'kmod-nls-cp852', -- NLS Codepage 852 (Europe) + 'kmod-nls-iso8859-1', -- NLS ISO 8859-1 (Latin 1) + 'kmod-nls-iso8859-13', -- NLS ISO 8859-13 (Latin 7; Baltic) + 'kmod-nls-iso8859-15', -- NLS ISO 8859-15 (Latin 9) + 'kmod-nls-iso8859-2', -- NLS ISO 8859-2 (Latin 2) + 'kmod-nls-utf8', -- NLS UTF-8 } pkgs_usb_net = { - 'kmod-mii', - 'kmod-usb-net', - 'kmod-usb-net-asix', - 'kmod-usb-net-asix-ax88179', - 'kmod-usb-net-cdc-eem', - 'kmod-usb-net-cdc-ether', - 'kmod-usb-net-cdc-subset', - 'kmod-usb-net-dm9601-ether', - 'kmod-usb-net-hso', - 'kmod-usb-net-ipheth', - 'kmod-usb-net-mcs7830', - 'kmod-usb-net-pegasus', - 'kmod-usb-net-rndis', - 'kmod-usb-net-rtl8152', - 'kmod-usb-net-smsc95xx' + 'kmod-mii', + 'kmod-usb-net', + 'kmod-usb-net-asix', + 'kmod-usb-net-asix-ax88179', + 'kmod-usb-net-cdc-eem', + 'kmod-usb-net-cdc-ether', + 'kmod-usb-net-cdc-subset', + 'kmod-usb-net-dm9601-ether', + 'kmod-usb-net-hso', + 'kmod-usb-net-ipheth', + 'kmod-usb-net-mcs7830', + 'kmod-usb-net-pegasus', + 'kmod-usb-net-rndis', + 'kmod-usb-net-rtl8152', + 'kmod-usb-net-smsc95xx', } pkgs_pci = { - 'pciutils', - 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 + 'pciutils', + 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 } include_usb = true -- 7M usable firmware space + USB port if target('ath79', 'generic') and not device({ - 'devolo-wifi-pro-1750e', - 'gl.inet-gl-ar150', - 'gl.inet-gl-ar300m-lite', - 'gl.inet-gl-ar750', - 'joy-it-jt-or750i', - 'netgear-wndr3700-v2', - 'tp-link-archer-a7-v5', - 'tp-link-archer-c5-v1', - 'tp-link-archer-c7-v2', - 'tp-link-archer-c7-v5', - 'tp-link-archer-c59-v1', - 'tp-link-tl-wr842n-v3', - 'tp-link-tl-wr1043nd-v4', - 'tp-link-tl-wr1043n-v5' + 'devolo-wifi-pro-1750e', + 'gl.inet-gl-ar150', + 'gl.inet-gl-ar300m-lite', + 'gl.inet-gl-ar750', + 'joy-it-jt-or750i', + 'netgear-wndr3700-v2', + 'tp-link-archer-a7-v5', + 'tp-link-archer-c5-v1', + 'tp-link-archer-c7-v2', + 'tp-link-archer-c7-v5', + 'tp-link-archer-c59-v1', + 'tp-link-tl-wr842n-v3', + 'tp-link-tl-wr1043nd-v4', + 'tp-link-tl-wr1043n-v5', }) then - include_usb = false + include_usb = false end if target('ramips', 'mt76x8') and not device({ - 'gl-mt300n-v2', - 'gl.inet-microuter-n300', - 'netgear-r6120', - 'ravpower-rp-wd009' + 'gl-mt300n-v2', + 'gl.inet-microuter-n300', + 'netgear-r6120', + 'ravpower-rp-wd009', }) then - include_usb = false + include_usb = false end if target('realtek','rtl838x') then - include_usb = false + include_usb = false end if device({ - 'avm-fritz-box-7412', - 'tp-link-td-w8970', - 'tp-link-td-w8980', - 'ubiquiti-unifi-6-lr-v1', - 'netgear-ex6150', - 'ubiquiti-edgerouter-x', - 'ubiquiti-edgerouter-x-sfp', - 'zyxel-nwa55axe'}) then - include_usb = false + 'avm-fritz-box-7412', + 'tp-link-td-w8970', + 'tp-link-td-w8980', + 'ubiquiti-unifi-6-lr-v1', + 'netgear-ex6150', + 'ubiquiti-edgerouter-x', + 'ubiquiti-edgerouter-x-sfp', + 'zyxel-nwa55axe'}) then + include_usb = false end if include_usb then - packages(pkgs_usb) - packages(pkgs_usb_net) - packages(pkgs_usb_serial) - packages(pkgs_usb_storage) + packages(pkgs_usb) + packages(pkgs_usb_net) + packages(pkgs_usb_serial) + packages(pkgs_usb_storage) end -if device({'zyxel-nwa55axe'}) then - packages {'ffda-network-setup-mode'} +-- device has no reset button and requires a special package to go into setup mode +-- https://github.com/freifunk-gluon/community-packages/tree/master/ffda-network-setup-mode +if device({ + 'zyxel-nwa55axe', +}) then + packages {'ffda-network-setup-mode'} end if target('x86', '64') then - packages {'qemu-ga'} + packages {'qemu-ga'} end if target('x86') and not target('x86', 'legacy') then - packages(pkgs_pci) - packages(pkgs_hid) + packages(pkgs_pci) + packages(pkgs_hid) end if target('bcm27xx') then - packages(pkgs_hid) + packages(pkgs_hid) end From d5c9778f0ab6036882e09b93ccd9c0d46dceedd6 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Fri, 5 Jan 2024 15:54:28 +0100 Subject: [PATCH 116/129] add wireless-encryption-wpa3 update structure to ffmuc remove usb for devices without usb port --- image-customization.lua | 63 ++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/image-customization.lua b/image-customization.lua index 5dad5ca..3d7ece9 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -23,24 +23,27 @@ packages { 'respondd-module-airtime', } -if device({ - 'zte,mf281', - 'glinet,gl-xe300', - 'glinet,gl-ap1300', - 'zte,mf289f', - 'wavlink,ws-wn572hp3-4g', - 'tplink,tl-mr6400-v5', -}) then +if not device_class('tiny') then features { - 'web-cellular' + 'tls', + 'wireless-encryption-wpa3', } -end - -if not device_class('tiny') then - features {'tls'} packages { + 'openssh-sftp-server', 'ffac-autoupdater-wifi-fallback', - 'openssh-sftp-server' + } +end + +if device({ + 'zte,mf281', + 'glinet,gl-xe300', + 'glinet,gl-ap1300', + 'zte,mf289f', + 'wavlink,ws-wn572hp3-4g', + 'tplink,tl-mr6400-v5', + }) then + features { + 'web-cellular', } end @@ -105,6 +108,11 @@ pkgs_pci = { include_usb = true +-- rtl838x has no USB support as of Gluon v2023.2 +if target('realtek', 'rtl838x') then + include_usb = false +end + -- 7M usable firmware space + USB port if target('ath79', 'generic') and not device({ 'devolo-wifi-pro-1750e', @@ -134,19 +142,28 @@ if target('ramips', 'mt76x8') and not device({ include_usb = false end -if target('realtek','rtl838x') then +-- 7M usable firmware space + USB port +if device({ + 'avm-fritz-box-7412', + 'tp-link-td-w8970', + 'tp-link-td-w8980', + 'gl-mt300n-v2', + 'gl.inet-microuter-n300', + 'netgear-r6120', + 'ravpower-rp-wd009' +}) then include_usb = false end +-- devices without usb ports if device({ - 'avm-fritz-box-7412', - 'tp-link-td-w8970', - 'tp-link-td-w8980', - 'ubiquiti-unifi-6-lr-v1', - 'netgear-ex6150', - 'ubiquiti-edgerouter-x', - 'ubiquiti-edgerouter-x-sfp', - 'zyxel-nwa55axe'}) then + 'ubiquiti-unifi-6-lr-v1', + 'netgear-ex6150', + 'netgear-ex3700', + 'ubiquiti-edgerouter-x', + 'ubiquiti-edgerouter-x-sfp', + 'zyxel-nwa55axe', +}) then include_usb = false end From 7835b4ea9cc545204ca44a4f367a074ec974e239 Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 9 Jan 2024 23:12:25 +0000 Subject: [PATCH 117/129] covr-x1860 is officially supported --- patches/add-covr-x1860.patch | 17 ----------------- patches/modules.patch | 16 ---------------- patches/targets-ramips-mt7621.patch | 8 ++++---- release.mk | 2 +- 4 files changed, 5 insertions(+), 38 deletions(-) delete mode 100644 patches/add-covr-x1860.patch delete mode 100644 patches/modules.patch diff --git a/patches/add-covr-x1860.patch b/patches/add-covr-x1860.patch deleted file mode 100644 index 701b4b6..0000000 --- a/patches/add-covr-x1860.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 3a2c1cd2..630fd7ab 100644 ---- a/targets/ramips-mt7621 -+++ b/targets/ramips-mt7621 -@@ -37,6 +37,12 @@ device('cudy-x6-v2', 'cudy_x6-v2', { - - -- D-Link - -+device('d-link-covr-x1860-a1', 'dlink_covr-x1860-a1', { -+ extra_images = { -+ {'-squashfs-recovery', '-recovery', '.bin'} -+ }, -+}) -+ - device('d-link-dap-x1860-a1', 'dlink_dap-x1860-a1') - - device('d-link-dir-860l-b1', 'dlink_dir-860l-b1') diff --git a/patches/modules.patch b/patches/modules.patch deleted file mode 100644 index bfae0a8..0000000 --- a/patches/modules.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/modules b/modules -index 8b77b64d..c0da2c9a 100644 ---- a/modules -+++ b/modules -@@ -1,8 +1,8 @@ - GLUON_FEEDS='gluon packages routing' - --OPENWRT_REPO=https://github.com/openwrt/openwrt.git --OPENWRT_BRANCH=openwrt-23.05 --OPENWRT_COMMIT=59fd8f08cf544a7f0fcaf700ca9af9292de3adcc -+OPENWRT_REPO=https://github.com/maurerle/openwrt.git -+OPENWRT_BRANCH=covr-x1860-gluon -+OPENWRT_COMMIT=02d87a058393ce714b6ffd3c63cc3823d42987f4 - - PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git - PACKAGES_GLUON_COMMIT=53ea3b89771fc7d7a80f1800ce25e98dfe1633aa diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index ebe3f02..a8a5540 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,5 +1,5 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index c5708838..3a2c1cd2 100644 +index 01b9b94c..630fd7ab 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 @@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { @@ -13,7 +13,7 @@ index c5708838..3a2c1cd2 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -83,6 +87,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { +@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { -- TP-Link @@ -22,7 +22,7 @@ index c5708838..3a2c1cd2 100644 device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { broken = true, -- LAN LED not working - review after resolving #2756 }) -@@ -100,6 +106,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { +@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { factory = false, }) @@ -33,7 +33,7 @@ index c5708838..3a2c1cd2 100644 -- Wavlink -@@ -156,6 +166,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN diff --git a/release.mk b/release.mk index 89a7802..2a489df 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := 06d547710bcd1d0e99ed6acb54002f9a46ed23de # master +GLUON_GIT_REF := 1ba17d6fe2f5bc0f327d42f1627522b709408b67 # master From 9de9eb4e15a6e5105e307157714582821f7a281c Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 18 Jan 2024 00:58:06 +0100 Subject: [PATCH 118/129] add open-vm-tools to x86-64 images --- image-customization.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/image-customization.lua b/image-customization.lua index 3d7ece9..01bedc6 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -183,7 +183,11 @@ if device({ end if target('x86', '64') then - packages {'qemu-ga'} + -- add guest agent for qemu and vmware + packages { + 'qemu-ga', + 'open-vm-tools', + } end if target('x86') and not target('x86', 'legacy') then From 6b238213e32ec95829d28db68cbe56c1ebc16675 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 18 Jan 2024 01:02:45 +0100 Subject: [PATCH 119/129] update to latest gluon: fixes WDR3600 and WDR4300 issue --- release.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.mk b/release.mk index 2a489df..4387179 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := 1ba17d6fe2f5bc0f327d42f1627522b709408b67 # master +GLUON_GIT_REF := bfbefa4580d1162b2766c6e685d85b970d0c9680 # master From a94984e508a7a19e1da71cf0655b6899f5323ce6 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 18 Jan 2024 01:11:20 +0100 Subject: [PATCH 120/129] temporarily fix 40MHz operation --- site.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site.conf b/site.conf index 0df15bf..33cb722 100644 --- a/site.conf +++ b/site.conf @@ -58,7 +58,8 @@ wifi5 = { channel = 44, - outdoor_chanlist = '100-116 132-140', -- exclude/avoid weather radar frequencies + outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies + -- exclude 136-140 temporarily to fix 40MHz operation -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html ap = { ssid = 'Freifunk', From 845501e5e3dada3ca9f32c5a5d83c80f66146d12 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Thu, 18 Jan 2024 01:20:35 +0100 Subject: [PATCH 121/129] update changelog for release v2023.2.0-9 --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a3552a..52f8276 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Freifunk Aachen Firmware Changelog +## v2023.2.0-9 + - add open-vm-tools to x86-64 + - update to latest gluon v2023.2.x + - fixes WDR3600 and WDR4300 hang on reboot issue + - fixes 40MHz operation with highest 5GHz channel + ## v2023.2.0-8 - package configuration with image-customization.lua - switch to maurerle/covr-x1860-gluon openwrt base From 0bb9c0cffd65c7f04d4c1546f887b06d45d771a5 Mon Sep 17 00:00:00 2001 From: FFAC Date: Thu, 18 Jan 2024 04:58:31 +0000 Subject: [PATCH 122/129] update patches --- patches/cellular.patch | 4 ++-- patches/targets-ath79-generic.patch | 8 ++++---- patches/targets-ipq40xx-mikrotik.patch | 2 +- patches/targets-lantiq-xrx200-devices.patch | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/patches/cellular.patch b/patches/cellular.patch index 98c6799..36b1c04 100644 --- a/patches/cellular.patch +++ b/patches/cellular.patch @@ -11,10 +11,10 @@ index 27294c4d..7301eff2 100755 setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15) elseif platform.match('ipq40xx', 'generic', { diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index 7ba3103f..37b25bb0 100644 +index 931363b5..5dd3980c 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -@@ -76,6 +76,7 @@ end +@@ -79,6 +79,7 @@ end function M.is_cellular_device() if M.match('ath79', 'nand', { 'zte,mf281', diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 7da5daa..59c68ca 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 626b6520..9c0f12fd 100644 +index af23bf6a..8b0ae548 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic @@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { @@ -18,10 +18,10 @@ index 626b6520..9c0f12fd 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -604,3 +613,14 @@ device('ubiquiti-unifi-ap-outdoor+', 'ubnt_unifi-ap-outdoor-plus', { +@@ -610,3 +619,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', { + factory = false, + packages = ATH10K_PACKAGES_QCA9880, }) - - device('ubiquiti-unifi-ap-pro', 'ubnt_unifi-ap-pro') + +-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { +-- packages = ATH10K_PACKAGES_QCA9880, diff --git a/patches/targets-ipq40xx-mikrotik.patch b/patches/targets-ipq40xx-mikrotik.patch index 246bdb4..0e73059 100644 --- a/patches/targets-ipq40xx-mikrotik.patch +++ b/patches/targets-ipq40xx-mikrotik.patch @@ -1,5 +1,5 @@ diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua -index 37b25bb0..c81913a8 100644 +index 014e516c..931363b5 100644 --- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua +++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua @@ -26,6 +26,8 @@ function M.is_outdoor_device() diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index 67519ec..daede07 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -1,8 +1,8 @@ -diff --git a/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch +diff --git a/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch b/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch new file mode 100644 index 00000000..9b7a21f9 --- /dev/null -+++ b/patches/openwrt/0010-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch ++++ b/patches/openwrt/0007-lantiq-fix-ath9k-eeprom-for-AVM-Fritz-Box-7430.patch @@ -0,0 +1,53 @@ +From: Felix Baumann +Date: Tue, 28 Feb 2023 04:21:07 +0100 From 69808182b82af90ac0df032d06f58e7316267b0a Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 29 Jan 2024 23:08:19 +0100 Subject: [PATCH 123/129] remove old unused x86 targets and sunxi-cortexa7 add zte-mf286r to web-cellular --- image-customization.lua | 1 + targets.mk | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/image-customization.lua b/image-customization.lua index 01bedc6..4311c00 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -39,6 +39,7 @@ if device({ 'glinet,gl-xe300', 'glinet,gl-ap1300', 'zte,mf289f', + 'zte,mf286r', 'wavlink,ws-wn572hp3-4g', 'tplink,tl-mr6400-v5', }) then diff --git a/targets.mk b/targets.mk index cff818a..c4ca0f9 100644 --- a/targets.mk +++ b/targets.mk @@ -17,10 +17,6 @@ ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 -sunxi-cortexa7 -x86-generic -x86-geode -x86-legacy x86-64 endef From 061ee9126f788350b2ecf0f278b4533a9eca495d Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Mon, 29 Jan 2024 23:08:32 +0100 Subject: [PATCH 124/129] update gluon to v2023.2.1 --- release.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.mk b/release.mk index 4387179..f2f696a 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := bfbefa4580d1162b2766c6e685d85b970d0c9680 # master +GLUON_GIT_REF := v2023.2.1 From 318531e57be9184219a6a172b7164d5cff5b2dab Mon Sep 17 00:00:00 2001 From: Felix Baumann Date: Tue, 13 Feb 2024 22:25:56 +0100 Subject: [PATCH 125/129] Create new v2024.1.x based on Gluon next --- release.mk | 2 +- site.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/release.mk b/release.mk index f2f696a..b83a83e 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := v2023.2.1 +GLUON_GIT_REF := befc3e803bca9a115ccd0ea17d4924feb7a83f83 diff --git a/site.conf b/site.conf index 33cb722..7e2ecad 100644 --- a/site.conf +++ b/site.conf @@ -78,7 +78,7 @@ mesh = { vxlan = false, - filter_membership_reports = false, + filter_membership_reports = true, batman_adv = { routing_algo = 'BATMAN_IV', gw_sel_class = 1, From 327dfb116cae256a94f1da44efc5cd149eb585d6 Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 13 Feb 2024 21:34:35 +0000 Subject: [PATCH 126/129] update-patches --- patches/targets-ath79-generic.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 59c68ca..9c5d3c6 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,8 +1,8 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index af23bf6a..8b0ae548 100644 +index 11d78ba2..b53e3d7b 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -506,6 +506,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { +@@ -512,6 +512,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { packages = ATH10K_PACKAGES_QCA9888, }) @@ -18,7 +18,7 @@ index af23bf6a..8b0ae548 100644 device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -610,3 +619,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', { +@@ -616,3 +625,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', { factory = false, packages = ATH10K_PACKAGES_QCA9880, }) From bcf5440b9877c138e1919798ab100702566fa191 Mon Sep 17 00:00:00 2001 From: FFAC Date: Tue, 13 Feb 2024 21:39:50 +0000 Subject: [PATCH 127/129] Update mirrors --- site.conf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/site.conf b/site.conf index 7e2ecad..cd064b2 100644 --- a/site.conf +++ b/site.conf @@ -221,9 +221,9 @@ stable = { name = 'stable', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.2.x/stable/sysupgrade', - 'http://updates.ffac.rocks/from-2023.2.x/stable/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.2.x/stable/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade', }, good_signatures = 4, pubkeys = { @@ -241,9 +241,9 @@ beta = { name = 'beta', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.2.x/beta/sysupgrade', - 'http://updates.ffac.rocks/from-2023.2.x/beta/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.2.x/beta/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade', }, good_signatures = 3, pubkeys = { @@ -261,9 +261,9 @@ experimental = { name = 'experimental', mirrors = { - 'http://updates.freifunk-aachen.de/from-2023.2.x/experimental/sysupgrade', - 'http://updates.ffac.rocks/from-2023.2.x/experimental/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2023.2.x/experimental/sysupgrade', + 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade', }, good_signatures = 2, pubkeys = { From ecf67fbb25b88d91ac8fd4adaa30a64dedc5dbe5 Mon Sep 17 00:00:00 2001 From: Florian Maurer Date: Fri, 5 Apr 2024 00:58:10 +0200 Subject: [PATCH 128/129] update gluon and patches Signed-off-by: Florian Maurer --- patches/targets-ath79-generic.patch | 19 +++++-------------- patches/targets-ath79-nand.patch | 4 ++-- patches/targets-ipq40xx-generic.patch | 10 +++++----- patches/targets-lantiq-xrx200-devices.patch | 6 +++--- patches/targets-mediatek-mt7622.patch | 10 +++------- patches/targets-ramips-mt7621.patch | 10 +++++----- release.mk | 2 +- 7 files changed, 24 insertions(+), 37 deletions(-) diff --git a/patches/targets-ath79-generic.patch b/patches/targets-ath79-generic.patch index 9c5d3c6..ba60956 100644 --- a/patches/targets-ath79-generic.patch +++ b/patches/targets-ath79-generic.patch @@ -1,35 +1,26 @@ diff --git a/targets/ath79-generic b/targets/ath79-generic -index 11d78ba2..b53e3d7b 100644 +index c41bf0db..17ee5e70 100644 --- a/targets/ath79-generic +++ b/targets/ath79-generic -@@ -512,6 +512,15 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { +@@ -471,6 +471,10 @@ device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { packages = ATH10K_PACKAGES_QCA9888, }) -+device('tp-link-eap225-outdoor-v3', 'tplink_eap225-outdoor-v3', { -+ factory = false, -+ packages = ATH10K_PACKAGES_QCA9888, -+}) -+ +device('tp-link-eap225-wall-v2', 'tplink_eap225-wall-v2', { + packages = ATH10K_PACKAGES_QCA9888, +}) + device('tp-link-tl-wdr3500-v1', 'tplink_tl-wdr3500-v1') + device('tp-link-tl-wdr3600-v1', 'tplink_tl-wdr3600-v1') - device('tp-link-tl-wdr4300-v1', 'tplink_tl-wdr4300-v1') -@@ -616,3 +625,14 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', { +@@ -548,3 +552,9 @@ device('ubiquiti-unifi-swiss-army-knife-ultra', 'ubnt_uk-ultra', { factory = false, packages = ATH10K_PACKAGES_QCA9880, }) + -+-- device('ubiquiti-rocket-5ac-lite', 'ubnt_rocket-5ac-lite', { -+-- packages = ATH10K_PACKAGES_QCA9880, -+-- }) -+ -+ +-- Zyxel + +device('zyxel-nbg6616', 'zyxel_nbg6616', { + packages = ATH10K_PACKAGES_QCA9880, +}) +\ No newline at end of file diff --git a/patches/targets-ath79-nand.patch b/patches/targets-ath79-nand.patch index 96569b5..927edc5 100644 --- a/patches/targets-ath79-nand.patch +++ b/patches/targets-ath79-nand.patch @@ -1,8 +1,8 @@ diff --git a/targets/ath79-nand b/targets/ath79-nand -index 68bffa4e..ed6907d0 100644 +index ba7e71f5..90918fb1 100644 --- a/targets/ath79-nand +++ b/targets/ath79-nand -@@ -62,6 +62,12 @@ device('zte-mf281', 'zte_mf281', { +@@ -56,6 +56,12 @@ device('zte-mf281', 'zte_mf281', { packages = ATH10K_PACKAGES_QCA9888, }) diff --git a/patches/targets-ipq40xx-generic.patch b/patches/targets-ipq40xx-generic.patch index 0543daf..149f904 100644 --- a/patches/targets-ipq40xx-generic.patch +++ b/patches/targets-ipq40xx-generic.patch @@ -1,5 +1,5 @@ diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic -index 068f538b..6e7c8bd4 100644 +index 85509de7..b26de7ca 100644 --- a/targets/ipq40xx-generic +++ b/targets/ipq40xx-generic @@ -14,6 +14,15 @@ local ATH10K_PACKAGES_IPQ40XX_QCA9888 = { @@ -18,7 +18,7 @@ index 068f538b..6e7c8bd4 100644 defaults { -@@ -57,6 +66,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { +@@ -73,6 +82,23 @@ device('avm-fritz-repeater-1200', 'avm_fritzrepeater-1200', { factory = false, }) @@ -42,7 +42,7 @@ index 068f538b..6e7c8bd4 100644 -- GL.iNet -@@ -73,6 +99,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { +@@ -89,6 +115,36 @@ device('gl.inet-gl-b1300', 'glinet_gl-b1300', { device('linksys-ea6350v3', 'linksys_ea6350v3') @@ -79,7 +79,7 @@ index 068f538b..6e7c8bd4 100644 -- Meraki -@@ -80,6 +136,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', { +@@ -96,6 +152,11 @@ device('meraki-mr33-access-point', 'meraki_mr33', { packages = { -- radio0 is monitoring radio - removed for now -- the -ct firmware does not have working mesh @@ -91,7 +91,7 @@ index 068f538b..6e7c8bd4 100644 '-ath10k-firmware-qca9887-ct', '-ath10k-board-qca9887', }, -@@ -123,6 +184,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', { +@@ -139,6 +200,7 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', { -- ZTE device('zte-mf289f', 'zte_mf289f', { diff --git a/patches/targets-lantiq-xrx200-devices.patch b/patches/targets-lantiq-xrx200-devices.patch index daede07..18e90d0 100644 --- a/patches/targets-lantiq-xrx200-devices.patch +++ b/patches/targets-lantiq-xrx200-devices.patch @@ -58,10 +58,10 @@ index 00000000..9b7a21f9 + caldata_extract_ubi "caldata" 0x1000 0x1000 + ath9k_patch_mac_crc $(macaddr_add $(mtd_get_mac_binary_ubi caldata 0x110c) 2) 0x10c diff --git a/targets/lantiq-xrx200 b/targets/lantiq-xrx200 -index f54cd87f..80f0659d 100644 +index 744fdea4..16672c91 100644 --- a/targets/lantiq-xrx200 +++ b/targets/lantiq-xrx200 -@@ -30,6 +30,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', { +@@ -33,6 +33,10 @@ device('avm-fritz-box-3370-rev-2-micron-nand', 'avm_fritz3370-rev2-micron', { broken = true, -- no button for setup mode; hw revision not visible on device }) @@ -72,7 +72,7 @@ index f54cd87f..80f0659d 100644 device('avm-fritz-box-7360-sl', 'avm_fritz7360sl', { factory = false, aliases = {'avm-fritz-box-7360-v1'}, -@@ -47,6 +51,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { +@@ -50,6 +54,10 @@ device('avm-fritz-box-7412', 'avm_fritz7412', { factory = false, }) diff --git a/patches/targets-mediatek-mt7622.patch b/patches/targets-mediatek-mt7622.patch index 41c604a..bdec74d 100644 --- a/patches/targets-mediatek-mt7622.patch +++ b/patches/targets-mediatek-mt7622.patch @@ -1,9 +1,9 @@ diff --git a/targets/mediatek-mt7622 b/targets/mediatek-mt7622 -index 8376c397..5c75ac21 100644 +index 81440d50..389c77a9 100644 --- a/targets/mediatek-mt7622 +++ b/targets/mediatek-mt7622 -@@ -11,6 +11,22 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', { - manifest_aliases = {'ubiquiti-unifi-6-lr'}, +@@ -13,3 +13,18 @@ device('ubiquiti-unifi-6-lr-v1', 'ubnt_unifi-6-lr-v1', { + manifest_aliases = {'ubiquiti-unifi-6-lr'}, -- Upgrade from OpenWrt 22.03 }) +device('ubiquiti-unifi-6-lr-v2', 'ubnt_unifi-6-lr-v2', { @@ -21,7 +21,3 @@ index 8376c397..5c75ac21 100644 + factory_ext = '.img', +}) + -+ - -- Xiaomi - - device('xiaomi-redmi-router-ax6s', 'xiaomi_redmi-router-ax6s', { diff --git a/patches/targets-ramips-mt7621.patch b/patches/targets-ramips-mt7621.patch index a8a5540..8663feb 100644 --- a/patches/targets-ramips-mt7621.patch +++ b/patches/targets-ramips-mt7621.patch @@ -1,8 +1,8 @@ diff --git a/targets/ramips-mt7621 b/targets/ramips-mt7621 -index 01b9b94c..630fd7ab 100644 +index f58a26c5..540f7ae9 100644 --- a/targets/ramips-mt7621 +++ b/targets/ramips-mt7621 -@@ -22,6 +22,10 @@ device('cudy-wr2100', 'cudy_wr2100', { +@@ -23,6 +23,10 @@ device('cudy-wr2100', 'cudy_wr2100', { factory = false, }) @@ -13,7 +13,7 @@ index 01b9b94c..630fd7ab 100644 device('cudy-x6-v1', 'cudy_x6-v1', { factory = false, }) -@@ -89,6 +93,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { +@@ -87,6 +91,8 @@ device('netgear-wndr3700-v5', 'netgear_wndr3700-v5', { -- TP-Link @@ -22,7 +22,7 @@ index 01b9b94c..630fd7ab 100644 device('tp-link-archer-c6-v3', 'tplink_archer-c6-v3', { broken = true, -- LAN LED not working - review after resolving #2756 }) -@@ -106,6 +112,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { +@@ -104,6 +110,10 @@ device('ubiquiti-unifi-6-lite', 'ubnt_unifi-6-lite', { factory = false, }) @@ -33,7 +33,7 @@ index 01b9b94c..630fd7ab 100644 -- Wavlink -@@ -162,6 +172,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { +@@ -153,6 +163,15 @@ device('zyxel-wsm20', 'zyxel_wsm20', { -- Devices without WLAN diff --git a/release.mk b/release.mk index b83a83e..a50a37b 100644 --- a/release.mk +++ b/release.mk @@ -1,2 +1,2 @@ GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git -GLUON_GIT_REF := befc3e803bca9a115ccd0ea17d4924feb7a83f83 +GLUON_GIT_REF := 8eb4bf1756f2b6697995531a97660922d4003ef0 From 3f5d533e2ba10dc9a62e8685c50b9dc3fe335711 Mon Sep 17 00:00:00 2001 From: wusel Date: Sun, 16 Jun 2024 03:57:34 +0200 Subject: [PATCH 129/129] Adjust to 4830.org ... --- ReleaseNotes | 121 +++++ image-customization.lua | 27 +- modules | 6 +- patches/0001-ffgt-Hide-email-address.patch | 25 + patches/0003-ffgt-Setup-via-WAN.patch | 84 ++++ ...Fix-respondd-to-work-on-ff02-1-again.patch | 25 + ...005-ffgt-Fix-respondd-to-ff02-2-1001.patch | 33 ++ patches/0006-ffgt-Adjust-for-FFGT-maps.patch | 36 ++ patches/0007-ffgt-status-page-fix.patch | 32 ++ patches/0009-ffgt-Show-online-status.patch | 41 ++ .../0010-ffgt-Show-online-status-fix.patch | 35 ++ patches/0011-ffgt-Add-community-name.patch | 35 ++ patches/0012-ffgt-Block-Ports-80-22.patch | 27 + .../0017-Allow-setting-HTMODE-from-site.patch | 53 ++ patches/status-page-anonymization.patch | 23 - site.conf | 464 ++++++------------ site.conf_ | 340 +++++++++++++ site.mk | 3 +- 18 files changed, 1057 insertions(+), 353 deletions(-) create mode 100644 ReleaseNotes create mode 100644 patches/0001-ffgt-Hide-email-address.patch create mode 100644 patches/0003-ffgt-Setup-via-WAN.patch create mode 100644 patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch create mode 100644 patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch create mode 100644 patches/0006-ffgt-Adjust-for-FFGT-maps.patch create mode 100644 patches/0007-ffgt-status-page-fix.patch create mode 100644 patches/0009-ffgt-Show-online-status.patch create mode 100644 patches/0010-ffgt-Show-online-status-fix.patch create mode 100644 patches/0011-ffgt-Add-community-name.patch create mode 100644 patches/0012-ffgt-Block-Ports-80-22.patch create mode 100644 patches/0017-Allow-setting-HTMODE-from-site.patch delete mode 100644 patches/status-page-anonymization.patch create mode 100644 site.conf_ diff --git a/ReleaseNotes b/ReleaseNotes new file mode 100644 index 0000000..3dd50c0 --- /dev/null +++ b/ReleaseNotes @@ -0,0 +1,121 @@ +Release Notes for gluon-4830-@@RELEASE@@ +======================================== + +This Freifunk Firmware is based on Gluon v2018.1.4 (1.0.x) +or v2018.2 (1.1.x; as of 2020-01-10 based on v2018.2.4) or +v2019.1 (1.2.x; as of 2021-04-06 based on v2019.1.3) and +includes some additional modules. + + 1.0.x: v2018.1.4 based, fastd + 1.1.2: v2018.2.x based, fastd + 1.1.5: v2018.2.x based, L2TP (tunneldigger) + 1.1.6: v2018.2.x based, VXLAN via Wireguard + 1.2.0: v2019.1.x based, L2TP (tunneldigger) (>= 1.2.0~38 includes the BROKEN gluon-migrate-ffbi) + 1.2.5: v2019.1.x based, fastd+batman14 — FFUE-Migration (tested WiFi-Autoupdater, FW servers migration-firmware.ffue & .4830.org) + 1.4.0: v2021.1.x based, L2TP (tunneldigger) (>= 1.4.0~48 includes a WORKING gluon-migrate-ffbiv2, ~50 fflg-migrate-to-multidomain, ca. ~120 ffue-migrate-to-multidomain) + 1.5.0: v2022.1.x based, L2TP (tunneldigger) – tng only, short-lived tests + 1.6.0: v2023.2.x based, L2TP (tunneldigger) – tng only, short-lived tests + 1.6.1: v2022.1.4 based, L2TP (tunneldigger) — new build process, NO migration support anymore (FFBI, FFLG, FFUE), possibly migration support from FFLIP-FW + 1.7.0: v2023.2.x based, L2TP (tunneldigger) + 1.8.0: v2024.1.x based, L2TP (tunneldigger) + +For 1.5 and beyond, the patches applied to Gluon reside in site/patches and are applied against the plain Gluon tree at build time. Prior to that, we used a modified Gluon tree: + + - modified $GLUON/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname + and $GLUON/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network so + that node a) uses WAN (if existing) for setup mode and b) is DHCP client — just like + in Freifunk mode. + + Files changed in core Gluon: + ./package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname + ./package/gluon-setup-mode/Makefile + ./package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network + ./package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html + ./package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd + ./package/gluon-respondd/files/etc/init.d/gluon-respondd (Undoing commit 59a44274cb00e88e3420b4c9c4303ca70f16b211) + ./package/gluon-respondd/src/respondd.c (from 1.4.x onwards: ./package/gluon-respondd/src/respondd-nodeinfo.c) + + - gluon-ssid-changer + + See https://github.com/Freifunk-Nord/gluon-ssid-changer/tree/2018.1.x -- for commit etc. see modules file + + - ffgt-banner + + Supplies a pimped motd file, including info about the HW, the OS and the FW version + + - ffgt-geolocate + + Supports geolocation in config mode and corrections in Freifunk mode + + - ffgt-setup-mode + + Base scripts of our geolocation-aware setup process + + - ffgt-nachtruhe + + Toggle "Nachtruhe", i. e. disable AP between 22:00 and 06:00 (based on ffho-ap-timer) + + - ffda-domain-director + + Server-based domain selection based on node's or neighbouring node's coordinates + + - ffda-name-conformizer + + Modify the nodename per firmware upgrade (cosmetic, non-sticking change) + + - tecff-autoupdater-wifi-fallback + + On prolonged lack of connectivity to the mesh, search for freifunk SSIDs and + try to become a wireless client, then force autoupdate. + + - gluon-ebtables-limit-arp + + The gluon-ebtables-limit-arp package adds filters to limit the amount of ARP + requests client devices are allowed to send into the mesh. + + The limits per client device, identified by its MAC address, are 6 packets per + minute and 1 per second per node in total. A burst of up to 50 ARP requests is + allowed until the rate-limiting takes effect (see --limit-burst in ebtables(8)). + […] + It mitigates the impact on the mesh when a larger range of its IPv4 subnet is + being scanned, which would otherwise result in a significant amount of ARP chatter, + even for unused IP addresses. + + - gluon-ebtables-filter-multicast + + The gluon-ebtables-filter-multicast package filters out various kinds of + non-essential multicast traffic, as this traffic often constitutes a + disproportionate burden on the mesh network. Unfortunately, this breaks many + useful services (Avahi, Bonjour chat, …), but this seems unavoidable, as the + current Avahi implementation is optimized for small local networks and causes + too much traffic in large mesh networks. + + - gluon-ebtables-filter-ra-dhcp + + The gluon-ebtables-filter-ra-dhcp package tries to prevent common + misconfigurations (i.e. connecting the client interface of a Gluon node to a + private network) from causing issues for either of the networks. + + - gluon-tunneldigger-watchdog + + Script that checks every five minutes for the presence of the tunneldigger process, + restarting it if neccessary. + + - gluon-migrate-ffbiv2 + + Migrates nodename, coordinates, ... from FFBI-Firmware to Gluon + + - fflg-migrate-to-multidomain + + Migrates from FFLG-Firmware to Mesh "lbg" in the 4830-Firmware + + - ffue-migrate-to-multidomain + + Migrates from FFUE-Firmwares to Meshes "uel", "cel", "gif", lhw" or "uez" in the 4830-Firmware + +For further info check corresponding Gluon Release Notes. + + + +Further Build Information: +========================== diff --git a/image-customization.lua b/image-customization.lua index 4311c00..6f2d1a3 100644 --- a/image-customization.lua +++ b/image-customization.lua @@ -4,23 +4,30 @@ features { 'ebtables-filter-ra-dhcp', 'ebtables-limit-arp', 'mesh-batman-adv-15', - 'mesh-vpn-wireguard', 'respondd', 'status-page', 'web-advanced', 'web-wizard', - 'config-mode-geo-location-osm', 'radv-filterd', 'radvd', 'web-private-wifi', } packages { + 'ff-mesh-vpn-tunneldigger', 'iwinfo', 'ffac-ssid-changer', 'ffac-wg-registration', 'ff-web-ap-timer', 'respondd-module-airtime', + 'ffac-ssid-changer', + 'ffac-autoupdater-wifi-fallback', + 'ffgt-speedtest', + 'ffgt-banner', + 'ffgt-config-mode-wizard', + 'ffgt-preserve-mods', + 'gluon-tunneldigger-watchdog', + 'gluon-multi-radio' } if not device_class('tiny') then @@ -107,11 +114,19 @@ pkgs_pci = { 'kmod-bnx2', -- Broadcom NetExtreme BCM5706/5708/5709/5716 } +pkgs_4830 = { + 'tcpdump', + 'mtr-json', + 'sipcalc' +} + include_usb = true +include_4830 = true -- rtl838x has no USB support as of Gluon v2023.2 if target('realtek', 'rtl838x') then include_usb = false + include_4830 = false end -- 7M usable firmware space + USB port @@ -132,6 +147,7 @@ if target('ath79', 'generic') and not device({ 'tp-link-tl-wr1043n-v5', }) then include_usb = false + include_4830 = false end if target('ramips', 'mt76x8') and not device({ @@ -141,6 +157,7 @@ if target('ramips', 'mt76x8') and not device({ 'ravpower-rp-wd009', }) then include_usb = false + include_4830 = false end -- 7M usable firmware space + USB port @@ -154,6 +171,7 @@ if device({ 'ravpower-rp-wd009' }) then include_usb = false + include_4830 = false end -- devices without usb ports @@ -166,6 +184,7 @@ if device({ 'zyxel-nwa55axe', }) then include_usb = false + include_4830 = false end if include_usb then @@ -175,6 +194,10 @@ if include_usb then packages(pkgs_usb_storage) end +if include_4830 then + packages(pkgs_4830) +end + -- device has no reset button and requires a special package to go into setup mode -- https://github.com/freifunk-gluon/community-packages/tree/master/ffda-network-setup-mode if device({ diff --git a/modules b/modules index 529ca21..fa20169 100644 --- a/modules +++ b/modules @@ -1,5 +1,9 @@ -GLUON_SITE_FEEDS="community" +GLUON_SITE_FEEDS="community ffgt" PACKAGES_COMMUNITY_REPO=https://github.com/freifunk-gluon/community-packages.git PACKAGES_COMMUNITY_COMMIT=661f553c12785f3287fab6018487a55efda55071 PACKAGES_COMMUNITY_BRANCH=master + +PACKAGES_FFGT_REPO=https://github.com/ffgtso/4830-packages-v2022.git +PACKAGES_FFGT_COMMIT=b393295771577c1a1fcf9df7216b5975bc2eec6d +PACKAGES_FFGT_BRANCH=master diff --git a/patches/0001-ffgt-Hide-email-address.patch b/patches/0001-ffgt-Hide-email-address.patch new file mode 100644 index 0000000..2e6ae28 --- /dev/null +++ b/patches/0001-ffgt-Hide-email-address.patch @@ -0,0 +1,25 @@ +From 5334c863918f3be4683d216512809b43395a37b5 Mon Sep 17 00:00:00 2001 +From: wusel +Date: Sat, 4 Feb 2023 02:25:42 +0100 +Subject: [PATCH] Hide email address + +--- + .../files/lib/gluon/status-page/view/status-page.html | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html +index cc121fe5..f404f3fe 100644 +--- a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html ++++ b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html +@@ -144,7 +144,7 @@ +
+
<%:Node name%>
<%| nodeinfo.hostname %>
+ <% if nodeinfo.owner and nodeinfo.owner.contact then -%> +-
<%:Contact%>
<%| nodeinfo.owner.contact %>
++
<%:Contact%>
email
+ <%- end %> + <% if nodeinfo.location then -%> +
<%:Location%>
+-- +2.30.2 + diff --git a/patches/0003-ffgt-Setup-via-WAN.patch b/patches/0003-ffgt-Setup-via-WAN.patch new file mode 100644 index 0000000..91df5e8 --- /dev/null +++ b/patches/0003-ffgt-Setup-via-WAN.patch @@ -0,0 +1,84 @@ +From 21b8e793322cba5be01c00735563bf49ef026f68 Mon Sep 17 00:00:00 2001 +From: wusel +Date: Sat, 4 Feb 2023 03:08:27 +0100 +Subject: [PATCH] Our setup mode has dhcp client on setup_ifname (WAN), and + 203.0.113.1/24 on lan_ifname (LAN) + +--- + .../files/lib/gluon/setup-mode/rc.d/S50uhttpd | 12 ++++++++++++ + .../files/lib/gluon/setup-mode/rc.d/S20network | 14 ++++++++++---- + .../luasrc/lib/gluon/upgrade/320-setup-ifname | 3 +++ + 3 files changed, 25 insertions(+), 4 deletions(-) + +diff --git a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd +index efd1d612..0a7f1c87 100755 +--- a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd ++++ b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd +@@ -7,6 +7,18 @@ USE_PROCD=1 + UHTTPD_BIN="/usr/sbin/uhttpd" + + start_service() { ++ /usr/sbin/iptables -I INPUT -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 172.16.0.0/12 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 172.16.0.0/12 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/iptables -I INPUT -s 203.0.113.0/24 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 80 -j ACCEPT ||: ++ /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 22 -j ACCEPT ||: + procd_open_instance + procd_set_param respawn + procd_set_param command "$UHTTPD_BIN" -f -h /lib/gluon/config-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80 +diff --git a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network +index 19ba6221..fb264d9b 100755 +--- a/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network ++++ b/package/gluon-setup-mode/files/lib/gluon/setup-mode/rc.d/S20network +@@ -1,6 +1,6 @@ + #!/bin/sh /etc/rc.common + +-SETUP_MODE_ADDR=192.168.1.1 ++SETUP_MODE_ADDR=203.0.113.1 + SETUP_MODE_NETMASK=255.255.255.0 + + START=20 +@@ -24,13 +24,19 @@ prepare_config() { + config_load network + config_foreach delete_interface interface + ++ # Our setup has dhcp client on setup_ifname, and 203.0.113.1/24 on lan_ifname (which may be the same; ++ # needs to be tested if this works properly). + uci_add network interface setup + uci_set network setup ifname "$(lua -e 'print(require("gluon.sysconfig").setup_ifname)')" + uci_set network setup macaddr "$(lua -e 'print(require("gluon.sysconfig").primary_mac)')" + uci_set network setup type 'bridge' +- uci_set network setup proto 'static' +- uci_set network setup ipaddr "$SETUP_MODE_ADDR" +- uci_set network setup netmask "$SETUP_MODE_NETMASK" ++ uci_set network setup proto 'dhcp' ++ ++ uci_add network interface fallback ++ uci_set network fallback ifname "$(lua -e 'print(require("gluon.sysconfig").lan_ifname)')" ++ uci_set network fallback proto 'static' ++ uci_set network fallback ipaddr "$SETUP_MODE_ADDR" ++ uci_set network fallback netmask "$SETUP_MODE_NETMASK" + + uci_commit network + ) +diff --git a/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname b/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname +index 3692fee8..a4b234d4 100755 +--- a/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname ++++ b/package/gluon-setup-mode/luasrc/lib/gluon/upgrade/320-setup-ifname +@@ -13,3 +13,6 @@ then + else + sysconfig.setup_ifname = sysconfig.single_ifname or sysconfig.lan_ifname + end ++ ++-- Always prefer WAN over LAN for setup_ifname ++sysconfig.setup_ifname = sysconfig.wan_ifname or sysconfig.single_ifname or sysconfig.lan_ifname +-- +2.30.2 + diff --git a/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch b/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch new file mode 100644 index 0000000..c6b0e53 --- /dev/null +++ b/patches/0004-ffgt-Fix-respondd-to-work-on-ff02-1-again.patch @@ -0,0 +1,25 @@ +From 5d03cbaeb44a77b30f39e3e6b3b61fa4f719b52b Mon Sep 17 00:00:00 2001 +From: wusel +Date: Sat, 4 Feb 2023 02:50:47 +0100 +Subject: [PATCH] Fix respondd to work on ff02::1 again + +--- + package/gluon-respondd/files/etc/init.d/gluon-respondd | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd +index c7b071eb..4e81332f 100755 +--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd ++++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd +@@ -13,7 +13,7 @@ start_service() { + local clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY";done;) + + procd_open_instance +- procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs ++ procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::1 $clientdevs $meshdevs -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs + procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5} + procd_set_param stderr 1 + procd_close_instance +-- +2.30.2 + diff --git a/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch b/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch new file mode 100644 index 0000000..5a17c08 --- /dev/null +++ b/patches/0005-ffgt-Fix-respondd-to-ff02-2-1001.patch @@ -0,0 +1,33 @@ +From 969a3517c60419c0bb47fd9e2aa8730a13d397fd Mon Sep 17 00:00:00 2001 +From: wusel +Date: Mon, 6 Feb 2023 03:25:32 +0100 +Subject: [PATCH] Fix respondd to ff02::2:1001 + +--- + .../luasrc/lib/gluon/ebtables/110-mcast-allow-respondd | 1 + + package/gluon-respondd/files/etc/init.d/gluon-respondd | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd b/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd +index 7df37ec9..4aa0bfc5 100644 +--- a/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd ++++ b/package/gluon-ebtables-filter-multicast/luasrc/lib/gluon/ebtables/110-mcast-allow-respondd +@@ -1 +1,2 @@ + rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 1001 --ip6-dst ff05::2:1001 -j RETURN' ++rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 1001 -j RETURN' +diff --git a/package/gluon-respondd/files/etc/init.d/gluon-respondd b/package/gluon-respondd/files/etc/init.d/gluon-respondd +index 4e81332f..dd2eab4e 100755 +--- a/package/gluon-respondd/files/etc/init.d/gluon-respondd ++++ b/package/gluon-respondd/files/etc/init.d/gluon-respondd +@@ -13,7 +13,7 @@ start_service() { + local clientdevs=$(for dev in $(echo "$ifdump" | jsonfilter -e "@.interface[@.interface='$(cat /lib/gluon/respondd/client.dev 2>/dev/null)' && @.up=true].device"); do echo " -i $dev -t $MAXDELAY";done;) + + procd_open_instance +- procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::1 $clientdevs $meshdevs -g ff02::2:1001 $meshdevs -g ff05::2:1001 $clientdevs ++ procd_set_param command $DAEMON -d /usr/lib/respondd -p 1001 -g ff02::2:1001 $meshdevs $clientdevs -g ff05::2:1001 $clientdevs -g ff02::1 $clientdevs + procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5} + procd_set_param stderr 1 + procd_close_instance +-- +2.30.2 + diff --git a/patches/0006-ffgt-Adjust-for-FFGT-maps.patch b/patches/0006-ffgt-Adjust-for-FFGT-maps.patch new file mode 100644 index 0000000..5ba8a0d --- /dev/null +++ b/patches/0006-ffgt-Adjust-for-FFGT-maps.patch @@ -0,0 +1,36 @@ +From ffa329a488c2796c09c5a758be9c0dbafe5b6bcd Mon Sep 17 00:00:00 2001 +From: wusel +Date: Mon, 6 Feb 2023 13:16:38 +0100 +Subject: [PATCH] Adjust for FFGT maps + +--- + package/gluon-respondd/src/respondd-nodeinfo.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/package/gluon-respondd/src/respondd-nodeinfo.c b/package/gluon-respondd/src/respondd-nodeinfo.c +index 105ce3c6..511c58f1 100644 +--- a/package/gluon-respondd/src/respondd-nodeinfo.c ++++ b/package/gluon-respondd/src/respondd-nodeinfo.c +@@ -127,10 +127,18 @@ struct json_object * respondd_provider_nodeinfo(void) { + json_object_object_add(ret, "software", software); + + struct json_object *system = json_object_new_object(); +- json_object_object_add(system, "site_code", get_site_code()); ++ // json_object_object_add(system, "site_code", get_site_code()); ++ // if (gluonutil_has_domains()) { ++ // json_object_object_add(system, "domain_code", get_domain_code()); ++ // json_object_object_add(system, "primary_domain_code", get_primary_domain_code()); ++ // } + if (gluonutil_has_domains()) { + json_object_object_add(system, "domain_code", get_domain_code()); ++ json_object_object_add(system, "gluon_site_code", get_site_code()); ++ json_object_object_add(system, "site_code", get_domain_code()); + json_object_object_add(system, "primary_domain_code", get_primary_domain_code()); ++ } else { ++ json_object_object_add(system, "site_code", get_site_code()); + } + json_object_object_add(ret, "system", system); + +-- +2.30.2 + diff --git a/patches/0007-ffgt-status-page-fix.patch b/patches/0007-ffgt-status-page-fix.patch new file mode 100644 index 0000000..09bf4b2 --- /dev/null +++ b/patches/0007-ffgt-status-page-fix.patch @@ -0,0 +1,32 @@ +From 21c4507532a254858e2dc1356ade03d0686301b2 Mon Sep 17 00:00:00 2001 +From: wusel +Date: Wed, 8 Feb 2023 22:07:06 +0100 +Subject: [PATCH] =?UTF-8?q?If=20no=20radio=20=E2=80=93=20e.=20g.=20Offload?= + =?UTF-8?q?er=20=E2=80=93,=20do=20not=20show=20wifi24/wifi5=20clients=20(t?= + =?UTF-8?q?here=20would=20be=20none=20anyway).?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + .../files/lib/gluon/status-page/view/status-page.html | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html +index f404f3fe..b98d410f 100644 +--- a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html ++++ b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html +@@ -222,8 +222,10 @@ + + + ++ <% if radios[1] then -%> + + ++ <%- end %> + +
<%:Total%><%= statistics('clients/total') %>
<%:Wireless 2.4 GHz%><%= statistics('clients/wifi24') %>
<%:Wireless 5 GHz%><%= statistics('clients/wifi5') %>
+ <% if radios[1] then -%> +-- +2.30.2 + diff --git a/patches/0009-ffgt-Show-online-status.patch b/patches/0009-ffgt-Show-online-status.patch new file mode 100644 index 0000000..8d8eff2 --- /dev/null +++ b/patches/0009-ffgt-Show-online-status.patch @@ -0,0 +1,41 @@ +From a1c2f0f8b5db43e488b3e7e855378304dcb2f90e Mon Sep 17 00:00:00 2001 +From: wusel +Date: Sun, 12 Feb 2023 17:05:53 +0100 +Subject: [PATCH] =?UTF-8?q?Show=20online=20status,=20depends=20on=20ffgt?= + =?UTF-8?q?=20package=20=E2=80=94=20maybe=20move=20to=20package=20&=20modi?= + =?UTF-8?q?fy-at-upgrade=3F?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + .../files/lib/gluon/config-mode/view/theme/layout.html | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html +index 865ec2aa..33406cca 100644 +--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html ++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html +@@ -16,6 +16,11 @@ You may obtain a copy of the License at + local hostname = pretty_hostname.get(uci) + local release = util.readfile("/lib/gluon/release") + ++ local onlinestate = "offline" ++ if unistd.access('/tmp/is_online') then ++ onlinestate=util.readfile("/tmp/is_online"):gsub("\.$","") ++ onlinestate=onlinestate:gsub("ipv". "IPv") ++ end + local root = node() + local rnode = node(unpack(request)) + +@@ -112,6 +117,7 @@ You may obtain a copy of the License at + <% if release then %> + / <%|release%> + <% end %> ++     (<%|onlinestate%>) + + + +-- +2.30.2 + diff --git a/patches/0010-ffgt-Show-online-status-fix.patch b/patches/0010-ffgt-Show-online-status-fix.patch new file mode 100644 index 0000000..83012bc --- /dev/null +++ b/patches/0010-ffgt-Show-online-status-fix.patch @@ -0,0 +1,35 @@ +From df6ec257913b621ed77d0b081bb43299cf4e2745 Mon Sep 17 00:00:00 2001 +From: wusel +Date: Mon, 13 Feb 2023 23:48:10 +0100 +Subject: [PATCH] Fix + +--- + .../files/lib/gluon/config-mode/view/theme/layout.html | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html +index 33406cca..7e5111e8 100644 +--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html ++++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html +@@ -12,14 +12,16 @@ You may obtain a copy of the License at + local pretty_hostname = require "pretty_hostname" + local uci = require("simple-uci").cursor() + local util = require "gluon.util" ++ local unistd = require 'posix.unistd' + + local hostname = pretty_hostname.get(uci) + local release = util.readfile("/lib/gluon/release") + + local onlinestate = "offline" + if unistd.access('/tmp/is_online') then +- onlinestate=util.readfile("/tmp/is_online"):gsub("\.$","") +- onlinestate=onlinestate:gsub("ipv". "IPv") ++ onlinestate=util.readfile("/tmp/is_online") ++ onlinestate=onlinestate:gsub('\.\n', '') ++ onlinestate=onlinestate:gsub("ipv", "IPv") + end + local root = node() + local rnode = node(unpack(request)) +-- +2.30.2 + diff --git a/patches/0011-ffgt-Add-community-name.patch b/patches/0011-ffgt-Add-community-name.patch new file mode 100644 index 0000000..89df600 --- /dev/null +++ b/patches/0011-ffgt-Add-community-name.patch @@ -0,0 +1,35 @@ +From 438a36abf851a323817c26b8e3b83d4fa3f5081d Mon Sep 17 00:00:00 2001 +From: wusel +Date: Tue, 14 Feb 2023 03:20:11 +0100 +Subject: [PATCH] Add community name + +--- + .../files/lib/gluon/config-mode/view/admin/info.html | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html +index 7e2c9e2d..3025a77f 100644 +--- a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html ++++ b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/info.html +@@ -7,7 +7,9 @@ + local platform = require 'gluon.platform' + local util = require "gluon.util" + local has_vpn, vpn = pcall(require, 'gluon.mesh-vpn') +- ++ local uci = require('simple-uci').cursor() ++ local core_domain = uci:get("gluon", "core", "domain") or "n/a" ++ local communityname = string.gsub(util.exec(string.format("/lib/gluon/ffgt-geolocate/get_domain_name.sh %s", core_domain)),"\n", "") or "n/a" + local _ = translate + + +@@ -28,6 +30,7 @@ + .. " / " .. util.trim(util.readfile('/lib/gluon/site-version')) }, + { _('Firmware release'), util.trim(util.readfile('/lib/gluon/release')) }, + { _('Site'), site.site_name() }, ++ { _('Mesh'), communityname }, + { _('Public VPN key'), pubkey }, + } + -%> +-- +2.30.2 + diff --git a/patches/0012-ffgt-Block-Ports-80-22.patch b/patches/0012-ffgt-Block-Ports-80-22.patch new file mode 100644 index 0000000..3cf9eab --- /dev/null +++ b/patches/0012-ffgt-Block-Ports-80-22.patch @@ -0,0 +1,27 @@ +From f8689a8c400e296a1a43ecfee2ac6038dadc0113 Mon Sep 17 00:00:00 2001 +From: wusel +Date: Wed, 15 Feb 2023 00:28:42 +0100 +Subject: [PATCH] Block Ports 80, 22 + +--- + .../files/lib/gluon/setup-mode/rc.d/S50uhttpd | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd +index 0a7f1c87..a24f0f04 100755 +--- a/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd ++++ b/package/gluon-config-mode-core/files/lib/gluon/setup-mode/rc.d/S50uhttpd +@@ -19,6 +19,10 @@ start_service() { + /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 80 -j ACCEPT ||: + /usr/sbin/ip6tables -I INPUT -s fe80::/10 -p tcp --dport 22 -j ACCEPT ||: + /usr/sbin/ip6tables -I INPUT -s fc00::/7 -p tcp --dport 22 -j ACCEPT ||: ++ /usr/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 22 -j DROP ||: ++ /usr/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j DROP ||: ++ /usr/sbin/ip6tables -A INPUT -s 0/0 -p tcp --dport 22 -j DROP ||: ++ /usr/sbin/ip6tables -A INPUT -s 0/0 -p tcp --dport 80 -j DROP ||: + procd_open_instance + procd_set_param respawn + procd_set_param command "$UHTTPD_BIN" -f -h /lib/gluon/config-mode/www -x /cgi-bin -A 1 -R -p 0.0.0.0:80 +-- +2.30.2 + diff --git a/patches/0017-Allow-setting-HTMODE-from-site.patch b/patches/0017-Allow-setting-HTMODE-from-site.patch new file mode 100644 index 0000000..f81a446 --- /dev/null +++ b/patches/0017-Allow-setting-HTMODE-from-site.patch @@ -0,0 +1,53 @@ +From c1b7b26df7755a4b9c719a412c617cf7fbcc48de Mon Sep 17 00:00:00 2001 +From: wusel +Date: Mon, 12 Jun 2023 02:43:10 +0200 +Subject: [PATCH] Allow setting HTMODE from site + +--- + .../luasrc/lib/gluon/upgrade/200-wireless | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless +index 604e33a8..b0b1e452 100755 +--- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless ++++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless +@@ -66,6 +66,8 @@ local function get_channel(radio, config) + end + + local function get_htmode(radio) ++ local site_htmode ++ + if radio.band == '5g' and is_outdoor() then + local outdoor_htmode = uci:get('gluon', 'wireless', 'outdoor_' .. radio['.name'] .. '_htmode') + if outdoor_htmode ~= nil then +@@ -74,15 +76,22 @@ local function get_htmode(radio) + end + + local phy = wireless.find_phy(radio) +- if iwinfo.nl80211.hwmodelist(phy).ax then +- return 'HE20' ++ if radio.band == '5g' then ++ site_htmode=site.wifi5.htmode('HT20') ++ else ++ site_htmode=site.wifi2.htmode('HT20') + end + +- if iwinfo.nl80211.hwmodelist(phy).ac then +- return 'VHT20' ++ if iwinfo.nl80211.hwmodelist(phy).ax then ++ if site_htmode == 'VHT40' then ++ site_htmode="HE40" ++ end + end ++ uci:set('gluon', 'wireless', radio['.name'] .. '_htmode', site_htmode) ++ uci:save('gluon') ++ uci:commit('gluon') + +- return 'HT20' ++ return site_htmode + end + + local function is_disabled(name) +-- +2.30.2 + diff --git a/patches/status-page-anonymization.patch b/patches/status-page-anonymization.patch deleted file mode 100644 index bd6afe3..0000000 --- a/patches/status-page-anonymization.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo -index ffe3651f..ef203e53 100755 ---- a/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo -+++ b/package/gluon-status-page/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo -@@ -8,4 +8,4 @@ badrequest() { - - ( gluon-list-mesh-interfaces | grep -qxF "$QUERY_STRING" ) 2>/dev/null || badrequest - --exec gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo -+exec gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo | sed 's/"owner":{"contact":"[^"]*"},//' -diff --git a/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua b/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua -index 80c5e50a..55fbb86b 100644 ---- a/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua -+++ b/package/gluon-status-page/luasrc/lib/gluon/status-page/controller/status-page.lua -@@ -61,7 +61,7 @@ local function match(a, b, n) - end - - entry({}, call(function(http, renderer) -- local nodeinfo = json.parse(util.exec('exec gluon-neighbour-info -d ::1 -p 1001 -t 3 -c 1 -r nodeinfo')) -+ local nodeinfo = json.parse(util.exec('exec gluon-neighbour-info -d ::1 -p 1001 -t 3 -c 1 -r nodeinfo | sed \'s/"owner":{"contact":"[^"]*"},//\'')) - - local node_ip = parse_ip(http:getenv('SERVER_ADDR')) - if node_ip and ( diff --git a/site.conf b/site.conf index cd064b2..f0cc1dd 100644 --- a/site.conf +++ b/site.conf @@ -1,340 +1,152 @@ { -- Documentation can be found here: https://gluon.readthedocs.io/en/latest/user/site.html#site-conf - hostname_prefix = 'ffac-', - site_name = 'Freifunk Rheinland - Regio Aachen', - site_code = 'ffac', - domain_seed = 'fcd2bb830c677865c60459899facdb630a9c09e26b72d995451c4feb9b337e6d', - - opkg = { - extra = { - modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S', - ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac', - gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon', - gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base', - }, - }, - - --[[ General network settings - prefix4: IPv4 range of your community - prefix6: IPv6 range of your community - is also required for radvd - - We use our global unicast block 2a03:2260:114::/48 for IP routing. This prefix is ONLY used for the next node feature and is used in multiple layer 2 network segments. - ]] - prefix6 = 'fdac::/64', - - - --[[ NTP settings - Synchronize the time of the nodes - timezone: Timezone of your community - http://wiki.openwrt.org/doc/uci/system#time.zones - ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community. - http://www.pool.ntp.org/zone/de - ############# - # NOTE: http://news.ntppool.org/2013/06/ipv6-monitoring-problems-for-g.html - # > As you might know only "2.pool.ntp.org" (and 2.debian.pool.ntp.org, etc) - # > returns AAAA records currently. - ############# - ]] - timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', - ntp_servers = { - 'a.ntp.ffac.rocks', - 'ntp-b.aachen.freifunk.net', - '2.openwrt.pool.ntp.org', - }, - - regdom = 'DE', - - wifi24 = { - channel = 11, - ap = { - ssid = 'Freifunk', - }, - mesh = { - id = 'ffac-bat4-mesh', - mcast_rate = 12000, - }, - }, - - wifi5 = { - channel = 44, - outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies - -- exclude 136-140 temporarily to fix 40MHz operation - -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html - ap = { - ssid = 'Freifunk', - }, - mesh = { - id = 'ffac-bat4-mesh', - mcast_rate = 12000, - }, - }, - - -- Configuration of the local node feature of Gluon - next_node = { - ip6 = 'fdac::ac', - mac = 'ac:41:95:40:f7:dc', - }, - - mesh = { - vxlan = false, - filter_membership_reports = true, - batman_adv = { - routing_algo = 'BATMAN_IV', - gw_sel_class = 1, - }, - }, - - - --[[ Gateway settings - fastd_mesh_vpn: fastd vpn settings - https://projects.universe-factory.net/projects/fastd/wiki/User_manual - sub - methods: encryption algorithms to use - https://projects.universe-factory.net/projects/fastd/wiki/Methods - When multiple method statements are given, the first one has the highest preference. - mtu: package size - backbone: fastd vpn gateways of your community - sub - limit: Number of gateways each node connects to - On startup, each node tries to connect to every gateway, and then chooses the number of 'limit' fastest gateways it could reach - peers: Gateways - sub sub - key: public fastd key of your gateway - https://github.com/tcatm/ecdsautils - remotes: List of fastd configuration strings to connect to your gateway server - ]] - mesh_vpn = { - enabled = true, - pubkey_privacy = false, - - wireguard = { - broker = 'wg-broker.freifunk-aachen.de/api/add_key', - peers = { - sn120 = { - public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=', - endpoint = '01.wg-node.freifunk-aachen.de:51820' - }, - sn111 = { - public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=', - endpoint = '01.wg-node.freifunk-aachen.de:51811' - }, - sn112 = { - public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=', - endpoint = '01.wg-node.freifunk-aachen.de:51812' - }, - sn113 = { - public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=', - endpoint = '01.wg-node.freifunk-aachen.de:51813' - }, - sn114 = { - public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=', - endpoint = '01.wg-node.freifunk-aachen.de:51814' - }, - sn115 = { - public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=', - endpoint = '01.wg-node.freifunk-aachen.de:51815' - }, - sn116 = { - public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=', - endpoint = '01.wg-node.freifunk-aachen.de:51816' - }, - sn117 = { - public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=', - endpoint = '01.wg-node.freifunk-aachen.de:51817' - }, - sn118 = { - public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=', - endpoint = '01.wg-node.freifunk-aachen.de:51818' - }, - sn119 = { - public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=', - endpoint = '01.wg-node.freifunk-aachen.de:51819' - }, - sn220 = { - public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=', - endpoint = '02.wg-node.freifunk-aachen.de:51820' - }, - sn211 = { - public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=', - endpoint = '02.wg-node.freifunk-aachen.de:51811' - }, - sn212 = { - public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=', - endpoint = '02.wg-node.freifunk-aachen.de:51812' - }, - sn213 = { - public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=', - endpoint = '02.wg-node.freifunk-aachen.de:51813' - }, - sn214 = { - public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=', - endpoint = '02.wg-node.freifunk-aachen.de:51814' - }, - sn215 = { - public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=', - endpoint = '02.wg-node.freifunk-aachen.de:51815' - }, - sn216 = { - public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=', - endpoint = '02.wg-node.freifunk-aachen.de:51816' - }, - sn217 = { - public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=', - endpoint = '02.wg-node.freifunk-aachen.de:51817' - }, - sn218 = { - public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=', - endpoint = '02.wg-node.freifunk-aachen.de:51818' - }, - sn219 = { - public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=', - endpoint = '02.wg-node.freifunk-aachen.de:51819' - }, - }, - mtu = 1406, - }, - }, - - --[[ Autoupdater settings - branch: Automatically update to this branch - branches: Available branches your community is publishing - sub sub - name: Name of branch (is used when compiling images) - mirrors: List of urls where to find the firmware - just serve the images on port 80 via http. a simple apache file-listing is enough. - see: http://luebeck.freifunk.net/firmware/ - probability: How often should a node search for updates - 1.0 - perform an update every hour - 0.5 - on average, perform an update every two hours - 0.0 - inhibit any automatic updates - good_signatures: How many signatures should be valid so the node decides to upgrade itself - pubkeys: public keys by developers used in manifest file of branch - manifest file - see gluon readme - $ make manifest GLUON_BRANCH=mybranch - $ contrib/sign.sh $SECRETKEY.file images/sysupgrade/manifest - ]] - autoupdater = { - branch = 'stable', - enabled = 1, - branches = { - stable = { - name = 'stable', - mirrors = { - 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade', - 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade', - }, - good_signatures = 4, - pubkeys = { - 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de - 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM - 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva - '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty - 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic - '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius - '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms - 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle - '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe - }, - }, - beta = { - name = 'beta', - mirrors = { - 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade', - 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade', - }, - good_signatures = 3, - pubkeys = { - 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de - 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM - 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva - '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty - 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic - '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius - '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms - 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle - '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe - }, - }, - experimental = { - name = 'experimental', - mirrors = { - 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade', - 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade', - 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade', - }, - good_signatures = 2, - pubkeys = { - 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de - 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM - 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva - '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty - 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic - '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius - '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms - 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle - '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe - }, - }, - }, - }, - - -- uncomment for update from 2019.1.x to v2021.1.x - --[[ update_channel = { - from_name = experimental, -- remove or false to catch all - -- if to_name is defined, autoupdater branch is set to it - to_name = 'beta', - } - ]] - - --[[ setup_mode = { - skip = false, -- Skip config_mode on first boot - }, - ]] - - config_mode = { + default_domain = 'zzz', + hostname_prefix = 'unconfigured-node-', + + opkg = { + extra = { + gluon = 'http://firmware.4830.org/packages/gluon-%GS-%GR/%S', + }, + }, + + site_name = 'Freifunk powered by 4830.org e. V.', + site_code = '4830', + timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', + ntp_servers = {'ntp.4830.org', 'time.nist.gov', '2.freifunk.pool.ntp.org'}, + regdom = 'DE', + + domain_director = { + url = 'http://setup.ipv6.4830.org/dd.php', + switch_after_offline = 360, + enabled = true, + }, + + config_mode = { + geo_location = { + show_altitude = false, + osm = { + center = { + lat = 51.893444037, + lon = 8.437500000, + }, + zoom = 10, +-- tile_layer = { +-- type = 'XYZ', +-- url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png', +-- attributions = '© OpenStreetMap contributors.', +-- }, + }, + }, hostname = { optional = false, }, remote_login = { - show_password_form = true, + show_password_form = false, min_password_length = 10, }, owner = { obligatory = true, }, - geo_location = { - osm = { - center = { - lat = 50.77, - lon = 6.107, - }, - zoom = 11, - tile_layer = { - type = 'XYZ', - url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png', - attributions = '© OpenStreetMap contributors.', - }, - }, - }, - }, - - ssid_changer = { - enabled = true, - switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE - -- set to 1440 to change once a day - -- set to 1 minute to change every time the router gets offline - first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated - prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!) - suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none' - tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable - -- upper and lower limit to turn the offline_ssid on and off - -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute. - tq_limit_max = 55, -- upper limit, above that the online SSID will be used - tq_limit_min = 45, -- lower limit, below that the offline SSID will be used - }, + }, + + radv_filterd = { + threshold = 1000, + }, + + mesh_vpn = { + enabled = true, + bandwidth_limit = { + enabled = false, + egress = 4000, + ingress = 16000, + }, + }, + + ssid_changer = { + enabled = true, + switch_timeframe = 1, + first = 2, + prefix = 'FF_OFFLINE_', + suffix = 'mac', + tq_limit_enabled = false, + tq_limit_max = 55, + tq_limit_min = 45 + }, + + autoupdater = { + enabled = 1, + branch = 'stable', + branches = { + stable = { + name = 'stable', + -- List of mirrors to fetch images from. IPv6 required! + --mirrors = {'http://firmware.ipv4.4830.org/stable/sysupgrade', 'http://firmware.ipv6.4830.org/stable/sysupgrade'}, + mirrors = {'http://firmware.ipv6.4830.org/stable/sysupgrade'}, + good_signatures = 2, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + testing = { + name = 'testing', + mirrors = {'http://firmware.ipv6.4830.org/testing/sysupgrade'}, + good_signatures = 1, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + experimental = { + name = 'experimental', + mirrors = {'http://firmware.ipv6.4830.org/experimental/sysupgrade'}, + good_signatures = 1, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + rawhide = { + name = 'rawhide', + mirrors = {'http://firmware.ipv6.4830.org/rawhide/sysupgrade'}, + good_signatures = 1, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + master = { + name = 'master', + mirrors = {'http://firmware.ipv6.4830.org/master/sysupgrade'}, + good_signatures = 1, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + tng = { + name = 'tng', + mirrors = {'http://firmware.ipv6.4830.org/tng/sysupgrade'}, + good_signatures = 1, + pubkeys = { + 'fbc997a8fd3b7372b3044cf855c660f70b0f713f8ab1dca4b9a1ae297c8f5588', -- FFGT builder + 'a7ac1e48f4459a995cf6bcd8d3668ca26cf36a1fe5981ddfca93d4c04632deeb', -- wusel + '3c09bcf54e9c2d244d7888c9d2bdea08b2f2dc249deda23ef8194a114be85390', -- QA1 + 'f3a88717ce7ec8250b40191edf088d6f30b9179ad7ec80a8e14abfd270ff8770', -- QA2 + }, + }, + }, + }, } -- /* vi: set ft=lua: */ diff --git a/site.conf_ b/site.conf_ new file mode 100644 index 0000000..cd064b2 --- /dev/null +++ b/site.conf_ @@ -0,0 +1,340 @@ +{ + -- Documentation can be found here: https://gluon.readthedocs.io/en/latest/user/site.html#site-conf + hostname_prefix = 'ffac-', + site_name = 'Freifunk Rheinland - Regio Aachen', + site_code = 'ffac', + domain_seed = 'fcd2bb830c677865c60459899facdb630a9c09e26b72d995451c4feb9b337e6d', + + opkg = { + extra = { + modules = 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S', + ffac = 'http://opkg.ffac.rocks/packages-%v/%A/ffac', + gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon', + gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base', + }, + }, + + --[[ General network settings + prefix4: IPv4 range of your community + prefix6: IPv6 range of your community + is also required for radvd + + We use our global unicast block 2a03:2260:114::/48 for IP routing. This prefix is ONLY used for the next node feature and is used in multiple layer 2 network segments. + ]] + prefix6 = 'fdac::/64', + + + --[[ NTP settings + Synchronize the time of the nodes + timezone: Timezone of your community + http://wiki.openwrt.org/doc/uci/system#time.zones + ntp_servers: List of NTP-Servers to query. You can use any public and/or your private NTP-Servers of your community. + http://www.pool.ntp.org/zone/de + ############# + # NOTE: http://news.ntppool.org/2013/06/ipv6-monitoring-problems-for-g.html + # > As you might know only "2.pool.ntp.org" (and 2.debian.pool.ntp.org, etc) + # > returns AAAA records currently. + ############# + ]] + timezone = 'CET-1CEST,M3.5.0,M10.5.0/3', + ntp_servers = { + 'a.ntp.ffac.rocks', + 'ntp-b.aachen.freifunk.net', + '2.openwrt.pool.ntp.org', + }, + + regdom = 'DE', + + wifi24 = { + channel = 11, + ap = { + ssid = 'Freifunk', + }, + mesh = { + id = 'ffac-bat4-mesh', + mcast_rate = 12000, + }, + }, + + wifi5 = { + channel = 44, + outdoor_chanlist = '100-116 132-136', -- exclude/avoid weather radar frequencies + -- exclude 136-140 temporarily to fix 40MHz operation + -- https://homepage.univie.ac.at/albert.rafetseder/RADARs/radars.html + ap = { + ssid = 'Freifunk', + }, + mesh = { + id = 'ffac-bat4-mesh', + mcast_rate = 12000, + }, + }, + + -- Configuration of the local node feature of Gluon + next_node = { + ip6 = 'fdac::ac', + mac = 'ac:41:95:40:f7:dc', + }, + + mesh = { + vxlan = false, + filter_membership_reports = true, + batman_adv = { + routing_algo = 'BATMAN_IV', + gw_sel_class = 1, + }, + }, + + + --[[ Gateway settings + fastd_mesh_vpn: fastd vpn settings + https://projects.universe-factory.net/projects/fastd/wiki/User_manual + sub + methods: encryption algorithms to use + https://projects.universe-factory.net/projects/fastd/wiki/Methods + When multiple method statements are given, the first one has the highest preference. + mtu: package size + backbone: fastd vpn gateways of your community + sub + limit: Number of gateways each node connects to + On startup, each node tries to connect to every gateway, and then chooses the number of 'limit' fastest gateways it could reach + peers: Gateways + sub sub + key: public fastd key of your gateway + https://github.com/tcatm/ecdsautils + remotes: List of fastd configuration strings to connect to your gateway server + ]] + mesh_vpn = { + enabled = true, + pubkey_privacy = false, + + wireguard = { + broker = 'wg-broker.freifunk-aachen.de/api/add_key', + peers = { + sn120 = { + public_key = 'jp47kK4OEkXf+VSsgKSYGji6mn6vrbXVeBMKwhx1on4=', + endpoint = '01.wg-node.freifunk-aachen.de:51820' + }, + sn111 = { + public_key = 'EuHYG/4MZZYf+ViX8gy2HY0A2RGR0Im45mZXmD6ThxI=', + endpoint = '01.wg-node.freifunk-aachen.de:51811' + }, + sn112 = { + public_key = '60HD+D/Ij/BxG/29RH+mLlS+ttHZNsNjugaSIJ7VBHM=', + endpoint = '01.wg-node.freifunk-aachen.de:51812' + }, + sn113 = { + public_key = 'ibMJXBMiC3jFA4rSMjcTqsueszOSder7N8Dpw1W+liQ=', + endpoint = '01.wg-node.freifunk-aachen.de:51813' + }, + sn114 = { + public_key = 'e4jSvixMGi89JAKnTpHA86GoHmBc6owOckTUslhNVxA=', + endpoint = '01.wg-node.freifunk-aachen.de:51814' + }, + sn115 = { + public_key = 'yY8Z5YbrAc518Z4Z/Bvlum8pB1VARZ316miql/uu1C0=', + endpoint = '01.wg-node.freifunk-aachen.de:51815' + }, + sn116 = { + public_key = 'RtPF/2EYZNJEKI/DJh+6R2M1FNsQUbCE0nvNSzXZW10=', + endpoint = '01.wg-node.freifunk-aachen.de:51816' + }, + sn117 = { + public_key = 'fA+lVmeVGIBcshSO1ZH8uHRqPainM7xS3wEhGTX+2DA=', + endpoint = '01.wg-node.freifunk-aachen.de:51817' + }, + sn118 = { + public_key = 'u8rkarH+ZNGZoMWD6aGLgnRHzSj95S5fbiBuQXvyFV0=', + endpoint = '01.wg-node.freifunk-aachen.de:51818' + }, + sn119 = { + public_key = 'Zk4LZXhYW+gj9dN/afKH634yYLDNBUDXEFxejHy7wgs=', + endpoint = '01.wg-node.freifunk-aachen.de:51819' + }, + sn220 = { + public_key = 'MK8M88m2Wfc5EFLQPbCRZwhqfPYMNAh51Jf0d7A78nY=', + endpoint = '02.wg-node.freifunk-aachen.de:51820' + }, + sn211 = { + public_key = 'VDqpMh1ljN/rqng88wIOet/XfMHk3XE6+nCBkOS82g0=', + endpoint = '02.wg-node.freifunk-aachen.de:51811' + }, + sn212 = { + public_key = 'UGK2rNyQX30dqMsdk+vU+0424DP1M/3UahjJR7rN3nw=', + endpoint = '02.wg-node.freifunk-aachen.de:51812' + }, + sn213 = { + public_key = 'iopPxw0qD6e2DAqEzR5WMHls9EQsxlYQk/pOAaKM9TM=', + endpoint = '02.wg-node.freifunk-aachen.de:51813' + }, + sn214 = { + public_key = 'yYZlSxiyKXLGk8jyDTnzXkxrPYvmOWpny9AWX3KPdFE=', + endpoint = '02.wg-node.freifunk-aachen.de:51814' + }, + sn215 = { + public_key = 'X0jmE3MOqzAjgWWNl6JAGcdE66rvsuhKp+WxC59geEE=', + endpoint = '02.wg-node.freifunk-aachen.de:51815' + }, + sn216 = { + public_key = 'Aq0yNPf2431SndyQtOBaIo5IDs73Tsv/Pw1FH2aNmxk=', + endpoint = '02.wg-node.freifunk-aachen.de:51816' + }, + sn217 = { + public_key = 'BunPn7Zvoub3QOYnygCxa/oCmPqM6XMjYHXNm3mOxRE=', + endpoint = '02.wg-node.freifunk-aachen.de:51817' + }, + sn218 = { + public_key = 'rsji/zzTtLTkG+ITrOKCyLWv61XWryT2s3TdozVjwV4=', + endpoint = '02.wg-node.freifunk-aachen.de:51818' + }, + sn219 = { + public_key = 'Ah9IDIcdW3zfoXuhD7MkKiDSL7xrgKfEKfMFfXRjphQ=', + endpoint = '02.wg-node.freifunk-aachen.de:51819' + }, + }, + mtu = 1406, + }, + }, + + --[[ Autoupdater settings + branch: Automatically update to this branch + branches: Available branches your community is publishing + sub sub + name: Name of branch (is used when compiling images) + mirrors: List of urls where to find the firmware + just serve the images on port 80 via http. a simple apache file-listing is enough. + see: http://luebeck.freifunk.net/firmware/ + probability: How often should a node search for updates + 1.0 - perform an update every hour + 0.5 - on average, perform an update every two hours + 0.0 - inhibit any automatic updates + good_signatures: How many signatures should be valid so the node decides to upgrade itself + pubkeys: public keys by developers used in manifest file of branch + manifest file - see gluon readme + $ make manifest GLUON_BRANCH=mybranch + $ contrib/sign.sh $SECRETKEY.file images/sysupgrade/manifest + ]] + autoupdater = { + branch = 'stable', + enabled = 1, + branches = { + stable = { + name = 'stable', + mirrors = { + 'http://updates.freifunk-aachen.de/from-2024.1.x/stable/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/stable/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/stable/sysupgrade', + }, + good_signatures = 4, + pubkeys = { + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de + 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM + 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva + '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty + 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic + '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius + '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms + 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe + }, + }, + beta = { + name = 'beta', + mirrors = { + 'http://updates.freifunk-aachen.de/from-2024.1.x/beta/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/beta/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/beta/sysupgrade', + }, + good_signatures = 3, + pubkeys = { + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de + 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM + 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva + '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty + 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic + '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius + '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms + 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe + }, + }, + experimental = { + name = 'experimental', + mirrors = { + 'http://updates.freifunk-aachen.de/from-2024.1.x/experimental/sysupgrade', + 'http://updates.ffac.rocks/from-2024.1.x/experimental/sysupgrade', + 'http://updates.aachen.freifunk.net/from-2024.1.x/experimental/sysupgrade', + }, + good_signatures = 2, + pubkeys = { + 'bea3e1a0a5e6f6075a97bee487cb77327b44d880ab770fa7c42938f821311b57', -- build.freifunk-aachen.de + 'b34dc4f34a5a6c588f6ac41736edd1195d9f5e949f913d4cc7a4777ebbf22c9c', -- MrMM + 'd6a35069e60afad2f4554d6609c0934e478e264e7cfbd131afeac66ba745dc02', -- Shiva + '5bdb75b8f2f290453933975ba772b94596a5dae5091a1e638d96e053247cf404', -- Monty + 'fcdc42af066d65fb655ab6d6f4709507dd29a0d38732bf60b3cbbdb1be6f7d24', -- Jannic + '8672f3f07594d0b078780470f416580139ca4cf7c0984aeeb718abdbe2d14196', -- Sirius + '342522f118b92ebeb5a8c9c9a2269faa886a14a798190fe5730cfff513a79dd3', -- vegms + 'c1b372eebb95d53f2d542a66d0ba27601e5855169a5a9270710e07bc6c02c232', -- maurerle + '75d0b74e1df35300e0766d141924afc59a1c1a9c1f104f8e2ff39f90b6c76c0b', -- djfe + }, + }, + }, + }, + + -- uncomment for update from 2019.1.x to v2021.1.x + --[[ update_channel = { + from_name = experimental, -- remove or false to catch all + -- if to_name is defined, autoupdater branch is set to it + to_name = 'beta', + } + ]] + + --[[ setup_mode = { + skip = false, -- Skip config_mode on first boot + }, + ]] + + config_mode = { + hostname = { + optional = false, + }, + remote_login = { + show_password_form = true, + min_password_length = 10, + }, + owner = { + obligatory = true, + }, + geo_location = { + osm = { + center = { + lat = 50.77, + lon = 6.107, + }, + zoom = 11, + tile_layer = { + type = 'XYZ', + url = 'https://tiles.aachen.freifunk.net/{z}/{x}/{y}.png', + attributions = '© OpenStreetMap contributors.', + }, + }, + }, + }, + + ssid_changer = { + enabled = true, + switch_timeframe = 1, -- only once every timeframe (in minutes) the SSID will change to OFFLINE + -- set to 1440 to change once a day + -- set to 1 minute to change every time the router gets offline + first = 2, -- the first few minutes directly after reboot within which an Offline-SSID always may be activated + prefix = 'FF_Offline_', -- use something short to leave space for the nodename (no '~' allowed!) + suffix = 'nodename', -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none' + tq_limit_enabled = false, -- if false, the offline SSID will only be set if there is no gateway reacheable + -- upper and lower limit to turn the offline_ssid on and off + -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute. + tq_limit_max = 55, -- upper limit, above that the online SSID will be used + tq_limit_min = 45, -- lower limit, below that the offline SSID will be used + }, +} + +-- /* vi: set ft=lua: */ diff --git a/site.mk b/site.mk index 2d966ca..950d056 100644 --- a/site.mk +++ b/site.mk @@ -24,4 +24,5 @@ GLUON_AUTOUPDATER_ENABLED ?= 1 GLUON_REGION ?= eu # Languages to include -GLUON_LANGS ?= en de \ No newline at end of file +GLUON_LANGS ?= de en +